{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"\n",
    "# @file name  : train_lenet.py\n",
    "# @author     : tingsongyu\n",
    "# @date       : 2019-09-07 10:08:00\n",
    "# @brief      : 人民币分类模型训练\n",
    "\"\"\"\n",
    "\"\"\"\n",
    "# @file name  : train_lenet_gpu.py\n",
    "# @modified by: greebear\n",
    "# @date       : 2019-10-26 13:25:00\n",
    "# @brief      : 猫狗分类模型训练\n",
    "\"\"\"\n",
    "import os\n",
    "import random\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "from torch.utils.data import DataLoader\n",
    "import torchvision.transforms as transforms\n",
    "import torch.optim as optim\n",
    "from matplotlib import pyplot as plt\n",
    "from lenet1 import LeNet, MyNet\n",
    "from my_dataset import DogCatDataset\n",
    "\n",
    "\n",
    "def set_seed(seed=1):\n",
    "    random.seed(seed)\n",
    "    np.random.seed(seed)\n",
    "    torch.manual_seed(seed)\n",
    "    torch.cuda.manual_seed(seed)\n",
    "\n",
    "\n",
    "set_seed()  # 设置随机种子\n",
    "\n",
    "# 参数设置\n",
    "MAX_EPOCH = 40\n",
    "BATCH_SIZE = 256\n",
    "LR = 0.001\n",
    "log_interval = 10\n",
    "val_interval = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ============================ step 1/5 数据 ============================\n",
    "\n",
    "split_dir = os.path.join(\"..\", \"data\", \"cad_split\")\n",
    "train_dir = os.path.join(split_dir, \"train\")\n",
    "valid_dir = os.path.join(split_dir, \"valid\")\n",
    "\n",
    "norm_mean = [0.485, 0.456, 0.406]\n",
    "norm_std = [0.229, 0.224, 0.225]\n",
    "\n",
    "train_transform = transforms.Compose([\n",
    "    transforms.Resize((224, 224)),\n",
    "    transforms.RandomCrop(224, padding=4),\n",
    "    transforms.ToTensor(),\n",
    "    transforms.Normalize(norm_mean, norm_std),\n",
    "])\n",
    "\n",
    "valid_transform = transforms.Compose([\n",
    "    transforms.Resize((224, 224)),\n",
    "    transforms.ToTensor(),\n",
    "    transforms.Normalize(norm_mean, norm_std),\n",
    "])\n",
    "\n",
    "# 构建MyDataset实例\n",
    "train_data = DogCatDataset(data_dir=train_dir, transform=train_transform)\n",
    "valid_data = DogCatDataset(data_dir=valid_dir, transform=valid_transform)\n",
    "\n",
    "# 构建DataLoder\n",
    "train_loader = DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True, num_workers=16)\n",
    "valid_loader = DataLoader(dataset=valid_data, batch_size=BATCH_SIZE, num_workers=16)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ============================ step 2/5 模型 ============================\n",
    "\n",
    "net = MyNet(classes=2)\n",
    "net.initialize_weights()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MyNet(\n",
       "  (conv1): Conv2d(3, 16, kernel_size=(7, 7), stride=(1, 1), padding=(3, 3))\n",
       "  (bn1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (conv2_1): Conv2d(16, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))\n",
       "  (bn2_1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (conv2_2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "  (bn2_2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (conv3_1): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))\n",
       "  (bn3_1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (conv3_2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "  (bn3_2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (conv4_1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))\n",
       "  (bn4_1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (conv4_2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "  (bn4_2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (avg_pool): AdaptiveAvgPool2d(output_size=(1, 1))\n",
       "  (bn5_avg): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (max_pool): AdaptiveMaxPool2d(output_size=(1, 1))\n",
       "  (bn5_max): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (dropout1): Dropout(p=0.25, inplace=False)\n",
       "  (fc1): Linear(in_features=256, out_features=128, bias=True)\n",
       "  (dropout2): Dropout(p=0.5, inplace=False)\n",
       "  (fc2): Linear(in_features=128, out_features=2, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net.to(\"cuda\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ============================ step 3/5 损失函数 ============================\n",
    "criterion = nn.CrossEntropyLoss()   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ============================ step 4/5 优化器 ============================\n",
    "optimizer = optim.Adam(net.parameters(), lr=LR, betas=(0.9, 0.999), eps=1e-08)                        # 选择优化器\n",
    "scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)     # 设置学习率下降策略"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# inputs.to(\"cuda\").device"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------------------------------------------\n",
      "        Layer (type)               Output Shape         Param #\n",
      "================================================================\n",
      "            Conv2d-1         [-1, 16, 112, 112]           2,368\n",
      "       BatchNorm2d-2         [-1, 16, 112, 112]              32\n",
      "            Conv2d-3           [-1, 32, 56, 56]           4,640\n",
      "       BatchNorm2d-4           [-1, 32, 56, 56]              64\n",
      "            Conv2d-5           [-1, 32, 56, 56]           9,248\n",
      "       BatchNorm2d-6           [-1, 32, 56, 56]              64\n",
      "            Conv2d-7           [-1, 64, 28, 28]          18,496\n",
      "       BatchNorm2d-8           [-1, 64, 28, 28]             128\n",
      "            Conv2d-9           [-1, 64, 28, 28]          36,928\n",
      "      BatchNorm2d-10           [-1, 64, 28, 28]             128\n",
      "           Conv2d-11          [-1, 128, 14, 14]          73,856\n",
      "      BatchNorm2d-12          [-1, 128, 14, 14]             256\n",
      "           Conv2d-13          [-1, 128, 14, 14]         147,584\n",
      "      BatchNorm2d-14          [-1, 128, 14, 14]             256\n",
      "AdaptiveAvgPool2d-15            [-1, 128, 1, 1]               0\n",
      "      BatchNorm2d-16            [-1, 128, 1, 1]             256\n",
      "AdaptiveMaxPool2d-17            [-1, 128, 1, 1]               0\n",
      "      BatchNorm2d-18            [-1, 128, 1, 1]             256\n",
      "          Dropout-19                  [-1, 256]               0\n",
      "           Linear-20                  [-1, 128]          32,896\n",
      "          Dropout-21                  [-1, 128]               0\n",
      "           Linear-22                    [-1, 2]             258\n",
      "================================================================\n",
      "Total params: 327,714\n",
      "Trainable params: 327,714\n",
      "Non-trainable params: 0\n",
      "----------------------------------------------------------------\n",
      "Input size (MB): 0.14\n",
      "Forward/backward pass size (MB): 8.43\n",
      "Params size (MB): 1.25\n",
      "Estimated Total Size (MB): 9.82\n",
      "----------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "from torchsummary import summary\n",
    "summary(net, input_size=(3, 112, 112))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "valid_acc = list()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[000/040] Iteration[010/200] Loss: 0.6773 Acc:58.20%\n",
      "Training:Epoch[000/040] Iteration[020/200] Loss: 0.6540 Acc:59.55%\n",
      "Training:Epoch[000/040] Iteration[030/200] Loss: 0.6560 Acc:59.40%\n",
      "Training:Epoch[000/040] Iteration[040/200] Loss: 0.6574 Acc:59.40%\n",
      "Training:Epoch[000/040] Iteration[050/200] Loss: 0.6487 Acc:59.76%\n",
      "Training:Epoch[000/040] Iteration[060/200] Loss: 0.6631 Acc:59.60%\n",
      "Training:Epoch[000/040] Iteration[070/200] Loss: 0.6468 Acc:59.70%\n",
      "Training:Epoch[000/040] Iteration[080/200] Loss: 0.6606 Acc:59.64%\n",
      "Training:Epoch[000/040] Iteration[090/200] Loss: 0.6492 Acc:59.72%\n",
      "Training:Epoch[000/040] Iteration[100/200] Loss: 0.6481 Acc:60.15%\n",
      "Training:Epoch[000/040] Iteration[110/200] Loss: 0.6410 Acc:60.35%\n",
      "Training:Epoch[000/040] Iteration[120/200] Loss: 0.6420 Acc:60.46%\n",
      "Training:Epoch[000/040] Iteration[130/200] Loss: 0.6373 Acc:60.61%\n",
      "Training:Epoch[000/040] Iteration[140/200] Loss: 0.6239 Acc:60.77%\n",
      "Training:Epoch[000/040] Iteration[150/200] Loss: 0.6389 Acc:60.99%\n",
      "Training:Epoch[000/040] Iteration[160/200] Loss: 0.6083 Acc:61.09%\n",
      "Training:Epoch[000/040] Iteration[170/200] Loss: 0.6114 Acc:61.36%\n",
      "Training:Epoch[000/040] Iteration[180/200] Loss: 0.6029 Acc:61.73%\n",
      "Training:Epoch[000/040] Iteration[190/200] Loss: 0.5879 Acc:62.11%\n",
      "Training:Epoch[000/040] Iteration[200/200] Loss: 0.6124 Acc:62.31%\n",
      "Valid:\t Epoch[000/040] Iteration[025/025] Loss: 15.4731 【Acc:65.16%】\n",
      "Training:Epoch[001/040] Iteration[010/200] Loss: 0.6188 Acc:64.20%\n",
      "Training:Epoch[001/040] Iteration[020/200] Loss: 0.6267 Acc:64.10%\n",
      "Training:Epoch[001/040] Iteration[030/200] Loss: 0.6099 Acc:64.77%\n",
      "Training:Epoch[001/040] Iteration[040/200] Loss: 0.6062 Acc:65.28%\n",
      "Training:Epoch[001/040] Iteration[050/200] Loss: 0.5918 Acc:65.70%\n",
      "Training:Epoch[001/040] Iteration[060/200] Loss: 0.5675 Acc:66.60%\n",
      "Training:Epoch[001/040] Iteration[070/200] Loss: 0.5836 Acc:67.01%\n",
      "Training:Epoch[001/040] Iteration[080/200] Loss: 0.5914 Acc:67.12%\n",
      "Training:Epoch[001/040] Iteration[090/200] Loss: 0.5571 Acc:67.63%\n",
      "Training:Epoch[001/040] Iteration[100/200] Loss: 0.5668 Acc:68.00%\n",
      "Training:Epoch[001/040] Iteration[110/200] Loss: 0.5897 Acc:68.06%\n",
      "Training:Epoch[001/040] Iteration[120/200] Loss: 0.5848 Acc:68.16%\n",
      "Training:Epoch[001/040] Iteration[130/200] Loss: 0.5969 Acc:68.12%\n",
      "Training:Epoch[001/040] Iteration[140/200] Loss: 0.5965 Acc:68.15%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[001/040] Iteration[150/200] Loss: 0.5604 Acc:68.32%\n",
      "Training:Epoch[001/040] Iteration[160/200] Loss: 0.5447 Acc:68.55%\n",
      "Training:Epoch[001/040] Iteration[170/200] Loss: 0.5520 Acc:68.75%\n",
      "Training:Epoch[001/040] Iteration[180/200] Loss: 0.5393 Acc:68.97%\n",
      "Training:Epoch[001/040] Iteration[190/200] Loss: 0.5342 Acc:69.25%\n",
      "Training:Epoch[001/040] Iteration[200/200] Loss: 0.5624 Acc:69.38%\n",
      "Valid:\t Epoch[001/040] Iteration[025/025] Loss: 15.5581 【Acc:66.88%】\n",
      "Training:Epoch[002/040] Iteration[010/200] Loss: 0.5686 Acc:71.10%\n",
      "Training:Epoch[002/040] Iteration[020/200] Loss: 0.5454 Acc:71.75%\n",
      "Training:Epoch[002/040] Iteration[030/200] Loss: 0.5332 Acc:72.17%\n",
      "Training:Epoch[002/040] Iteration[040/200] Loss: 0.5602 Acc:72.05%\n",
      "Training:Epoch[002/040] Iteration[050/200] Loss: 0.5544 Acc:71.92%\n",
      "Training:Epoch[002/040] Iteration[060/200] Loss: 0.5780 Acc:71.88%\n",
      "Training:Epoch[002/040] Iteration[070/200] Loss: 0.5450 Acc:72.26%\n",
      "Training:Epoch[002/040] Iteration[080/200] Loss: 0.5546 Acc:72.46%\n",
      "Training:Epoch[002/040] Iteration[090/200] Loss: 0.5321 Acc:72.47%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[002/040] Iteration[100/200] Loss: 0.4995 Acc:72.84%\n",
      "Training:Epoch[002/040] Iteration[110/200] Loss: 0.5199 Acc:73.08%\n",
      "Training:Epoch[002/040] Iteration[120/200] Loss: 0.5287 Acc:73.12%\n",
      "Training:Epoch[002/040] Iteration[130/200] Loss: 0.5567 Acc:72.92%\n",
      "Training:Epoch[002/040] Iteration[140/200] Loss: 0.5325 Acc:72.99%\n",
      "Training:Epoch[002/040] Iteration[150/200] Loss: 0.5477 Acc:72.96%\n",
      "Training:Epoch[002/040] Iteration[160/200] Loss: 0.5155 Acc:73.12%\n",
      "Training:Epoch[002/040] Iteration[170/200] Loss: 0.5333 Acc:73.24%\n",
      "Training:Epoch[002/040] Iteration[180/200] Loss: 0.5185 Acc:73.31%\n",
      "Training:Epoch[002/040] Iteration[190/200] Loss: 0.5486 Acc:73.20%\n",
      "Training:Epoch[002/040] Iteration[200/200] Loss: 0.5311 Acc:73.21%\n",
      "Valid:\t Epoch[002/040] Iteration[025/025] Loss: 13.1290 【Acc:73.12%】\n",
      "Training:Epoch[003/040] Iteration[010/200] Loss: 0.4925 Acc:75.80%\n",
      "Training:Epoch[003/040] Iteration[020/200] Loss: 0.5297 Acc:74.60%\n",
      "Training:Epoch[003/040] Iteration[030/200] Loss: 0.5287 Acc:74.27%\n",
      "Training:Epoch[003/040] Iteration[040/200] Loss: 0.5134 Acc:74.60%\n",
      "Training:Epoch[003/040] Iteration[050/200] Loss: 0.5288 Acc:74.62%\n",
      "Training:Epoch[003/040] Iteration[060/200] Loss: 0.5194 Acc:74.72%\n",
      "Training:Epoch[003/040] Iteration[070/200] Loss: 0.5234 Acc:74.61%\n",
      "Training:Epoch[003/040] Iteration[080/200] Loss: 0.5336 Acc:74.41%\n",
      "Training:Epoch[003/040] Iteration[090/200] Loss: 0.4957 Acc:74.70%\n",
      "Training:Epoch[003/040] Iteration[100/200] Loss: 0.5246 Acc:74.68%\n",
      "Training:Epoch[003/040] Iteration[110/200] Loss: 0.5205 Acc:74.68%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[003/040] Iteration[120/200] Loss: 0.5229 Acc:74.67%\n",
      "Training:Epoch[003/040] Iteration[130/200] Loss: 0.5465 Acc:74.50%\n",
      "Training:Epoch[003/040] Iteration[140/200] Loss: 0.5160 Acc:74.49%\n",
      "Training:Epoch[003/040] Iteration[150/200] Loss: 0.5106 Acc:74.51%\n",
      "Training:Epoch[003/040] Iteration[160/200] Loss: 0.4836 Acc:74.64%\n",
      "Training:Epoch[003/040] Iteration[170/200] Loss: 0.5227 Acc:74.59%\n",
      "Training:Epoch[003/040] Iteration[180/200] Loss: 0.4955 Acc:74.67%\n",
      "Training:Epoch[003/040] Iteration[190/200] Loss: 0.5114 Acc:74.68%\n",
      "Training:Epoch[003/040] Iteration[200/200] Loss: 0.5067 Acc:74.70%\n",
      "Valid:\t Epoch[003/040] Iteration[025/025] Loss: 12.4291 【Acc:76.12%】\n",
      "Training:Epoch[004/040] Iteration[010/200] Loss: 0.4934 Acc:75.90%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[004/040] Iteration[020/200] Loss: 0.5015 Acc:75.85%\n",
      "Training:Epoch[004/040] Iteration[030/200] Loss: 0.5001 Acc:75.67%\n",
      "Training:Epoch[004/040] Iteration[040/200] Loss: 0.5140 Acc:75.55%\n",
      "Training:Epoch[004/040] Iteration[050/200] Loss: 0.4948 Acc:75.82%\n",
      "Training:Epoch[004/040] Iteration[060/200] Loss: 0.4985 Acc:75.98%\n",
      "Training:Epoch[004/040] Iteration[070/200] Loss: 0.4673 Acc:76.26%\n",
      "Training:Epoch[004/040] Iteration[080/200] Loss: 0.4819 Acc:76.38%\n",
      "Training:Epoch[004/040] Iteration[090/200] Loss: 0.5133 Acc:76.11%\n",
      "Training:Epoch[004/040] Iteration[100/200] Loss: 0.4931 Acc:76.06%\n",
      "Training:Epoch[004/040] Iteration[110/200] Loss: 0.5205 Acc:75.96%\n",
      "Training:Epoch[004/040] Iteration[120/200] Loss: 0.5002 Acc:75.86%\n",
      "Training:Epoch[004/040] Iteration[130/200] Loss: 0.4914 Acc:75.92%\n",
      "Training:Epoch[004/040] Iteration[140/200] Loss: 0.5037 Acc:75.98%\n",
      "Training:Epoch[004/040] Iteration[150/200] Loss: 0.4558 Acc:76.11%\n",
      "Training:Epoch[004/040] Iteration[160/200] Loss: 0.4717 Acc:76.14%\n",
      "Training:Epoch[004/040] Iteration[170/200] Loss: 0.4755 Acc:76.21%\n",
      "Training:Epoch[004/040] Iteration[180/200] Loss: 0.4930 Acc:76.24%\n",
      "Training:Epoch[004/040] Iteration[190/200] Loss: 0.5140 Acc:76.14%\n",
      "Training:Epoch[004/040] Iteration[200/200] Loss: 0.5233 Acc:76.00%\n",
      "Valid:\t Epoch[004/040] Iteration[025/025] Loss: 13.1834 【Acc:74.32%】\n",
      "Training:Epoch[005/040] Iteration[010/200] Loss: 0.5155 Acc:74.40%\n",
      "Training:Epoch[005/040] Iteration[020/200] Loss: 0.4734 Acc:77.00%\n",
      "Training:Epoch[005/040] Iteration[030/200] Loss: 0.4914 Acc:77.50%\n",
      "Training:Epoch[005/040] Iteration[040/200] Loss: 0.4747 Acc:77.62%\n",
      "Training:Epoch[005/040] Iteration[050/200] Loss: 0.4831 Acc:77.26%\n",
      "Training:Epoch[005/040] Iteration[060/200] Loss: 0.4563 Acc:77.45%\n",
      "Training:Epoch[005/040] Iteration[070/200] Loss: 0.4567 Acc:77.84%\n",
      "Training:Epoch[005/040] Iteration[080/200] Loss: 0.4740 Acc:77.88%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[005/040] Iteration[090/200] Loss: 0.4410 Acc:78.11%\n",
      "Training:Epoch[005/040] Iteration[100/200] Loss: 0.4983 Acc:77.82%\n",
      "Training:Epoch[005/040] Iteration[110/200] Loss: 0.4612 Acc:77.88%\n",
      "Training:Epoch[005/040] Iteration[120/200] Loss: 0.4640 Acc:77.83%\n",
      "Training:Epoch[005/040] Iteration[130/200] Loss: 0.4960 Acc:77.65%\n",
      "Training:Epoch[005/040] Iteration[140/200] Loss: 0.4737 Acc:77.64%\n",
      "Training:Epoch[005/040] Iteration[150/200] Loss: 0.4667 Acc:77.53%\n",
      "Training:Epoch[005/040] Iteration[160/200] Loss: 0.4961 Acc:77.40%\n",
      "Training:Epoch[005/040] Iteration[170/200] Loss: 0.4653 Acc:77.43%\n",
      "Training:Epoch[005/040] Iteration[180/200] Loss: 0.4826 Acc:77.35%\n",
      "Training:Epoch[005/040] Iteration[190/200] Loss: 0.4740 Acc:77.35%\n",
      "Training:Epoch[005/040] Iteration[200/200] Loss: 0.4849 Acc:77.39%\n",
      "Valid:\t Epoch[005/040] Iteration[025/025] Loss: 11.5850 【Acc:78.40%】\n",
      "Training:Epoch[006/040] Iteration[010/200] Loss: 0.4761 Acc:77.40%\n",
      "Training:Epoch[006/040] Iteration[020/200] Loss: 0.4477 Acc:78.95%\n",
      "Training:Epoch[006/040] Iteration[030/200] Loss: 0.4525 Acc:79.03%\n",
      "Training:Epoch[006/040] Iteration[040/200] Loss: 0.4658 Acc:78.80%\n",
      "Training:Epoch[006/040] Iteration[050/200] Loss: 0.4826 Acc:78.40%\n",
      "Training:Epoch[006/040] Iteration[060/200] Loss: 0.4864 Acc:77.98%\n",
      "Training:Epoch[006/040] Iteration[070/200] Loss: 0.4808 Acc:78.00%\n",
      "Training:Epoch[006/040] Iteration[080/200] Loss: 0.4402 Acc:78.11%\n",
      "Training:Epoch[006/040] Iteration[090/200] Loss: 0.4713 Acc:78.07%\n",
      "Training:Epoch[006/040] Iteration[100/200] Loss: 0.4238 Acc:78.36%\n",
      "Training:Epoch[006/040] Iteration[110/200] Loss: 0.4708 Acc:78.38%\n",
      "Training:Epoch[006/040] Iteration[120/200] Loss: 0.4267 Acc:78.53%\n",
      "Training:Epoch[006/040] Iteration[130/200] Loss: 0.4638 Acc:78.58%\n",
      "Training:Epoch[006/040] Iteration[140/200] Loss: 0.5041 Acc:78.37%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[006/040] Iteration[150/200] Loss: 0.4422 Acc:78.46%\n",
      "Training:Epoch[006/040] Iteration[160/200] Loss: 0.4657 Acc:78.36%\n",
      "Training:Epoch[006/040] Iteration[170/200] Loss: 0.4561 Acc:78.39%\n",
      "Training:Epoch[006/040] Iteration[180/200] Loss: 0.4692 Acc:78.26%\n",
      "Training:Epoch[006/040] Iteration[190/200] Loss: 0.4392 Acc:78.32%\n",
      "Training:Epoch[006/040] Iteration[200/200] Loss: 0.4435 Acc:78.36%\n",
      "Valid:\t Epoch[006/040] Iteration[025/025] Loss: 13.8241 【Acc:73.52%】\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[007/040] Iteration[010/200] Loss: 0.4519 Acc:78.50%\n",
      "Training:Epoch[007/040] Iteration[020/200] Loss: 0.3924 Acc:80.95%\n",
      "Training:Epoch[007/040] Iteration[030/200] Loss: 0.4286 Acc:80.80%\n",
      "Training:Epoch[007/040] Iteration[040/200] Loss: 0.4423 Acc:80.47%\n",
      "Training:Epoch[007/040] Iteration[050/200] Loss: 0.4603 Acc:80.26%\n",
      "Training:Epoch[007/040] Iteration[060/200] Loss: 0.4564 Acc:79.80%\n",
      "Training:Epoch[007/040] Iteration[070/200] Loss: 0.4317 Acc:79.74%\n",
      "Training:Epoch[007/040] Iteration[080/200] Loss: 0.4452 Acc:79.67%\n",
      "Training:Epoch[007/040] Iteration[090/200] Loss: 0.4428 Acc:79.63%\n",
      "Training:Epoch[007/040] Iteration[100/200] Loss: 0.4276 Acc:79.49%\n",
      "Training:Epoch[007/040] Iteration[110/200] Loss: 0.4633 Acc:79.33%\n",
      "Training:Epoch[007/040] Iteration[120/200] Loss: 0.4385 Acc:79.37%\n",
      "Training:Epoch[007/040] Iteration[130/200] Loss: 0.4324 Acc:79.41%\n",
      "Training:Epoch[007/040] Iteration[140/200] Loss: 0.4406 Acc:79.36%\n",
      "Training:Epoch[007/040] Iteration[150/200] Loss: 0.4220 Acc:79.45%\n",
      "Training:Epoch[007/040] Iteration[160/200] Loss: 0.4254 Acc:79.56%\n",
      "Training:Epoch[007/040] Iteration[170/200] Loss: 0.4360 Acc:79.54%\n",
      "Training:Epoch[007/040] Iteration[180/200] Loss: 0.4405 Acc:79.59%\n",
      "Training:Epoch[007/040] Iteration[190/200] Loss: 0.4459 Acc:79.52%\n",
      "Training:Epoch[007/040] Iteration[200/200] Loss: 0.4496 Acc:79.51%\n",
      "Valid:\t Epoch[007/040] Iteration[025/025] Loss: 12.1583 【Acc:76.32%】\n",
      "Training:Epoch[008/040] Iteration[010/200] Loss: 0.4159 Acc:82.00%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[008/040] Iteration[020/200] Loss: 0.4070 Acc:81.25%\n",
      "Training:Epoch[008/040] Iteration[030/200] Loss: 0.4248 Acc:80.53%\n",
      "Training:Epoch[008/040] Iteration[040/200] Loss: 0.4150 Acc:80.88%\n",
      "Training:Epoch[008/040] Iteration[050/200] Loss: 0.4419 Acc:80.38%\n",
      "Training:Epoch[008/040] Iteration[060/200] Loss: 0.3957 Acc:80.55%\n",
      "Training:Epoch[008/040] Iteration[070/200] Loss: 0.4275 Acc:80.53%\n",
      "Training:Epoch[008/040] Iteration[080/200] Loss: 0.4167 Acc:80.58%\n",
      "Training:Epoch[008/040] Iteration[090/200] Loss: 0.4647 Acc:80.41%\n",
      "Training:Epoch[008/040] Iteration[100/200] Loss: 0.4196 Acc:80.47%\n",
      "Training:Epoch[008/040] Iteration[110/200] Loss: 0.4195 Acc:80.52%\n",
      "Training:Epoch[008/040] Iteration[120/200] Loss: 0.4401 Acc:80.49%\n",
      "Training:Epoch[008/040] Iteration[130/200] Loss: 0.4394 Acc:80.50%\n",
      "Training:Epoch[008/040] Iteration[140/200] Loss: 0.4303 Acc:80.53%\n",
      "Training:Epoch[008/040] Iteration[150/200] Loss: 0.4151 Acc:80.45%\n",
      "Training:Epoch[008/040] Iteration[160/200] Loss: 0.4220 Acc:80.47%\n",
      "Training:Epoch[008/040] Iteration[170/200] Loss: 0.4429 Acc:80.43%\n",
      "Training:Epoch[008/040] Iteration[180/200] Loss: 0.4267 Acc:80.43%\n",
      "Training:Epoch[008/040] Iteration[190/200] Loss: 0.4191 Acc:80.46%\n",
      "Training:Epoch[008/040] Iteration[200/200] Loss: 0.3910 Acc:80.50%\n",
      "Valid:\t Epoch[008/040] Iteration[025/025] Loss: 10.2507 【Acc:81.68%】\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[009/040] Iteration[010/200] Loss: 0.4113 Acc:81.20%\n",
      "Training:Epoch[009/040] Iteration[020/200] Loss: 0.4340 Acc:81.15%\n",
      "Training:Epoch[009/040] Iteration[030/200] Loss: 0.3713 Acc:82.20%\n",
      "Training:Epoch[009/040] Iteration[040/200] Loss: 0.3874 Acc:82.50%\n",
      "Training:Epoch[009/040] Iteration[050/200] Loss: 0.4194 Acc:82.12%\n",
      "Training:Epoch[009/040] Iteration[060/200] Loss: 0.4141 Acc:81.77%\n",
      "Training:Epoch[009/040] Iteration[070/200] Loss: 0.4091 Acc:81.80%\n",
      "Training:Epoch[009/040] Iteration[080/200] Loss: 0.4024 Acc:81.81%\n",
      "Training:Epoch[009/040] Iteration[090/200] Loss: 0.3966 Acc:81.98%\n",
      "Training:Epoch[009/040] Iteration[100/200] Loss: 0.4176 Acc:81.91%\n",
      "Training:Epoch[009/040] Iteration[110/200] Loss: 0.4180 Acc:81.86%\n",
      "Training:Epoch[009/040] Iteration[120/200] Loss: 0.3922 Acc:81.88%\n",
      "Training:Epoch[009/040] Iteration[130/200] Loss: 0.4236 Acc:81.77%\n",
      "Training:Epoch[009/040] Iteration[140/200] Loss: 0.3957 Acc:81.91%\n",
      "Training:Epoch[009/040] Iteration[150/200] Loss: 0.3972 Acc:81.87%\n",
      "Training:Epoch[009/040] Iteration[160/200] Loss: 0.4165 Acc:81.81%\n",
      "Training:Epoch[009/040] Iteration[170/200] Loss: 0.4125 Acc:81.75%\n",
      "Training:Epoch[009/040] Iteration[180/200] Loss: 0.4019 Acc:81.76%\n",
      "Training:Epoch[009/040] Iteration[190/200] Loss: 0.4135 Acc:81.67%\n",
      "Training:Epoch[009/040] Iteration[200/200] Loss: 0.3893 Acc:81.69%\n",
      "Valid:\t Epoch[009/040] Iteration[025/025] Loss: 9.9773 【Acc:81.24%】\n",
      "Training:Epoch[010/040] Iteration[010/200] Loss: 0.4067 Acc:82.10%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[010/040] Iteration[020/200] Loss: 0.3838 Acc:82.60%\n",
      "Training:Epoch[010/040] Iteration[030/200] Loss: 0.3648 Acc:83.43%\n",
      "Training:Epoch[010/040] Iteration[040/200] Loss: 0.3784 Acc:83.33%\n",
      "Training:Epoch[010/040] Iteration[050/200] Loss: 0.3635 Acc:83.46%\n",
      "Training:Epoch[010/040] Iteration[060/200] Loss: 0.3684 Acc:83.47%\n",
      "Training:Epoch[010/040] Iteration[070/200] Loss: 0.3615 Acc:83.53%\n",
      "Training:Epoch[010/040] Iteration[080/200] Loss: 0.3453 Acc:83.69%\n",
      "Training:Epoch[010/040] Iteration[090/200] Loss: 0.3609 Acc:83.72%\n",
      "Training:Epoch[010/040] Iteration[100/200] Loss: 0.3547 Acc:83.79%\n",
      "Training:Epoch[010/040] Iteration[110/200] Loss: 0.3547 Acc:83.81%\n",
      "Training:Epoch[010/040] Iteration[120/200] Loss: 0.3712 Acc:83.84%\n",
      "Training:Epoch[010/040] Iteration[130/200] Loss: 0.3737 Acc:83.77%\n",
      "Training:Epoch[010/040] Iteration[140/200] Loss: 0.3350 Acc:83.91%\n",
      "Training:Epoch[010/040] Iteration[150/200] Loss: 0.3718 Acc:83.78%\n",
      "Training:Epoch[010/040] Iteration[160/200] Loss: 0.3782 Acc:83.73%\n",
      "Training:Epoch[010/040] Iteration[170/200] Loss: 0.3685 Acc:83.66%\n",
      "Training:Epoch[010/040] Iteration[180/200] Loss: 0.3462 Acc:83.74%\n",
      "Training:Epoch[010/040] Iteration[190/200] Loss: 0.3514 Acc:83.79%\n",
      "Training:Epoch[010/040] Iteration[200/200] Loss: 0.3737 Acc:83.76%\n",
      "Valid:\t Epoch[010/040] Iteration[025/025] Loss: 9.0022 【Acc:84.08%】\n",
      "Training:Epoch[011/040] Iteration[010/200] Loss: 0.3350 Acc:86.50%\n",
      "Training:Epoch[011/040] Iteration[020/200] Loss: 0.3532 Acc:84.85%\n",
      "Training:Epoch[011/040] Iteration[030/200] Loss: 0.4003 Acc:83.73%\n",
      "Training:Epoch[011/040] Iteration[040/200] Loss: 0.3072 Acc:84.60%\n",
      "Training:Epoch[011/040] Iteration[050/200] Loss: 0.3597 Acc:84.44%\n",
      "Training:Epoch[011/040] Iteration[060/200] Loss: 0.3734 Acc:84.22%\n",
      "Training:Epoch[011/040] Iteration[070/200] Loss: 0.3567 Acc:84.30%\n",
      "Training:Epoch[011/040] Iteration[080/200] Loss: 0.3770 Acc:84.25%\n",
      "Training:Epoch[011/040] Iteration[090/200] Loss: 0.3451 Acc:84.33%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[011/040] Iteration[100/200] Loss: 0.3714 Acc:84.29%\n",
      "Training:Epoch[011/040] Iteration[110/200] Loss: 0.3674 Acc:84.22%\n",
      "Training:Epoch[011/040] Iteration[120/200] Loss: 0.3383 Acc:84.30%\n",
      "Training:Epoch[011/040] Iteration[130/200] Loss: 0.3706 Acc:84.29%\n",
      "Training:Epoch[011/040] Iteration[140/200] Loss: 0.3407 Acc:84.29%\n",
      "Training:Epoch[011/040] Iteration[150/200] Loss: 0.3225 Acc:84.35%\n",
      "Training:Epoch[011/040] Iteration[160/200] Loss: 0.3477 Acc:84.37%\n",
      "Training:Epoch[011/040] Iteration[170/200] Loss: 0.3688 Acc:84.36%\n",
      "Training:Epoch[011/040] Iteration[180/200] Loss: 0.3892 Acc:84.23%\n",
      "Training:Epoch[011/040] Iteration[190/200] Loss: 0.3672 Acc:84.21%\n",
      "Training:Epoch[011/040] Iteration[200/200] Loss: 0.3855 Acc:84.14%\n",
      "Valid:\t Epoch[011/040] Iteration[025/025] Loss: 8.9667 【Acc:83.32%】\n",
      "Training:Epoch[012/040] Iteration[010/200] Loss: 0.3375 Acc:84.20%\n",
      "Training:Epoch[012/040] Iteration[020/200] Loss: 0.3164 Acc:85.85%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[012/040] Iteration[030/200] Loss: 0.3659 Acc:84.83%\n",
      "Training:Epoch[012/040] Iteration[040/200] Loss: 0.3415 Acc:84.62%\n",
      "Training:Epoch[012/040] Iteration[050/200] Loss: 0.3567 Acc:84.68%\n",
      "Training:Epoch[012/040] Iteration[060/200] Loss: 0.3786 Acc:84.57%\n",
      "Training:Epoch[012/040] Iteration[070/200] Loss: 0.3416 Acc:84.74%\n",
      "Training:Epoch[012/040] Iteration[080/200] Loss: 0.3885 Acc:84.51%\n",
      "Training:Epoch[012/040] Iteration[090/200] Loss: 0.3602 Acc:84.31%\n",
      "Training:Epoch[012/040] Iteration[100/200] Loss: 0.3530 Acc:84.31%\n",
      "Training:Epoch[012/040] Iteration[110/200] Loss: 0.3587 Acc:84.32%\n",
      "Training:Epoch[012/040] Iteration[120/200] Loss: 0.3436 Acc:84.33%\n",
      "Training:Epoch[012/040] Iteration[130/200] Loss: 0.3497 Acc:84.38%\n",
      "Training:Epoch[012/040] Iteration[140/200] Loss: 0.3466 Acc:84.31%\n",
      "Training:Epoch[012/040] Iteration[150/200] Loss: 0.3591 Acc:84.27%\n",
      "Training:Epoch[012/040] Iteration[160/200] Loss: 0.3365 Acc:84.40%\n",
      "Training:Epoch[012/040] Iteration[170/200] Loss: 0.3564 Acc:84.44%\n",
      "Training:Epoch[012/040] Iteration[180/200] Loss: 0.3524 Acc:84.46%\n",
      "Training:Epoch[012/040] Iteration[190/200] Loss: 0.3512 Acc:84.43%\n",
      "Training:Epoch[012/040] Iteration[200/200] Loss: 0.3418 Acc:84.47%\n",
      "Valid:\t Epoch[012/040] Iteration[025/025] Loss: 8.7705 【Acc:84.16%】\n",
      "Training:Epoch[013/040] Iteration[010/200] Loss: 0.3548 Acc:84.30%\n",
      "Training:Epoch[013/040] Iteration[020/200] Loss: 0.3418 Acc:85.10%\n",
      "Training:Epoch[013/040] Iteration[030/200] Loss: 0.3258 Acc:85.57%\n",
      "Training:Epoch[013/040] Iteration[040/200] Loss: 0.3390 Acc:85.47%\n",
      "Training:Epoch[013/040] Iteration[050/200] Loss: 0.3661 Acc:85.32%\n",
      "Training:Epoch[013/040] Iteration[060/200] Loss: 0.3804 Acc:84.88%\n",
      "Training:Epoch[013/040] Iteration[070/200] Loss: 0.3302 Acc:84.96%\n",
      "Training:Epoch[013/040] Iteration[080/200] Loss: 0.3844 Acc:84.59%\n",
      "Training:Epoch[013/040] Iteration[090/200] Loss: 0.3379 Acc:84.76%\n",
      "Training:Epoch[013/040] Iteration[100/200] Loss: 0.3607 Acc:84.75%\n",
      "Training:Epoch[013/040] Iteration[110/200] Loss: 0.3594 Acc:84.55%\n",
      "Training:Epoch[013/040] Iteration[120/200] Loss: 0.3429 Acc:84.62%\n",
      "Training:Epoch[013/040] Iteration[130/200] Loss: 0.3417 Acc:84.62%\n",
      "Training:Epoch[013/040] Iteration[140/200] Loss: 0.3328 Acc:84.69%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[013/040] Iteration[150/200] Loss: 0.3572 Acc:84.59%\n",
      "Training:Epoch[013/040] Iteration[160/200] Loss: 0.3582 Acc:84.56%\n",
      "Training:Epoch[013/040] Iteration[170/200] Loss: 0.3411 Acc:84.64%\n",
      "Training:Epoch[013/040] Iteration[180/200] Loss: 0.3626 Acc:84.58%\n",
      "Training:Epoch[013/040] Iteration[190/200] Loss: 0.3378 Acc:84.57%\n",
      "Training:Epoch[013/040] Iteration[200/200] Loss: 0.3405 Acc:84.59%\n",
      "Valid:\t Epoch[013/040] Iteration[025/025] Loss: 8.7373 【Acc:84.28%】\n",
      "Training:Epoch[014/040] Iteration[010/200] Loss: 0.3431 Acc:85.20%\n",
      "Training:Epoch[014/040] Iteration[020/200] Loss: 0.3601 Acc:83.90%\n",
      "Training:Epoch[014/040] Iteration[030/200] Loss: 0.3354 Acc:84.23%\n",
      "Training:Epoch[014/040] Iteration[040/200] Loss: 0.3637 Acc:84.28%\n",
      "Training:Epoch[014/040] Iteration[050/200] Loss: 0.3400 Acc:84.58%\n",
      "Training:Epoch[014/040] Iteration[060/200] Loss: 0.3189 Acc:84.77%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[014/040] Iteration[070/200] Loss: 0.3409 Acc:84.81%\n",
      "Training:Epoch[014/040] Iteration[080/200] Loss: 0.3502 Acc:84.75%\n",
      "Training:Epoch[014/040] Iteration[090/200] Loss: 0.3453 Acc:84.68%\n",
      "Training:Epoch[014/040] Iteration[100/200] Loss: 0.3296 Acc:84.64%\n",
      "Training:Epoch[014/040] Iteration[110/200] Loss: 0.3345 Acc:84.63%\n",
      "Training:Epoch[014/040] Iteration[120/200] Loss: 0.3457 Acc:84.68%\n",
      "Training:Epoch[014/040] Iteration[130/200] Loss: 0.3701 Acc:84.66%\n",
      "Training:Epoch[014/040] Iteration[140/200] Loss: 0.3298 Acc:84.81%\n",
      "Training:Epoch[014/040] Iteration[150/200] Loss: 0.3514 Acc:84.81%\n",
      "Training:Epoch[014/040] Iteration[160/200] Loss: 0.3157 Acc:84.84%\n",
      "Training:Epoch[014/040] Iteration[170/200] Loss: 0.3475 Acc:84.80%\n",
      "Training:Epoch[014/040] Iteration[180/200] Loss: 0.3372 Acc:84.82%\n",
      "Training:Epoch[014/040] Iteration[190/200] Loss: 0.3566 Acc:84.78%\n",
      "Training:Epoch[014/040] Iteration[200/200] Loss: 0.3485 Acc:84.76%\n",
      "Valid:\t Epoch[014/040] Iteration[025/025] Loss: 8.7258 【Acc:84.32%】\n",
      "Training:Epoch[015/040] Iteration[010/200] Loss: 0.3808 Acc:82.60%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[015/040] Iteration[020/200] Loss: 0.3257 Acc:84.40%\n",
      "Training:Epoch[015/040] Iteration[030/200] Loss: 0.3240 Acc:84.70%\n",
      "Training:Epoch[015/040] Iteration[040/200] Loss: 0.3241 Acc:85.25%\n",
      "Training:Epoch[015/040] Iteration[050/200] Loss: 0.3256 Acc:85.12%\n",
      "Training:Epoch[015/040] Iteration[060/200] Loss: 0.3480 Acc:85.05%\n",
      "Training:Epoch[015/040] Iteration[070/200] Loss: 0.3506 Acc:84.91%\n",
      "Training:Epoch[015/040] Iteration[080/200] Loss: 0.3478 Acc:84.96%\n",
      "Training:Epoch[015/040] Iteration[090/200] Loss: 0.3278 Acc:85.11%\n",
      "Training:Epoch[015/040] Iteration[100/200] Loss: 0.3548 Acc:84.98%\n",
      "Training:Epoch[015/040] Iteration[110/200] Loss: 0.3462 Acc:85.05%\n",
      "Training:Epoch[015/040] Iteration[120/200] Loss: 0.3173 Acc:85.20%\n",
      "Training:Epoch[015/040] Iteration[130/200] Loss: 0.3401 Acc:85.18%\n",
      "Training:Epoch[015/040] Iteration[140/200] Loss: 0.3383 Acc:85.17%\n",
      "Training:Epoch[015/040] Iteration[150/200] Loss: 0.3422 Acc:85.07%\n",
      "Training:Epoch[015/040] Iteration[160/200] Loss: 0.3614 Acc:85.08%\n",
      "Training:Epoch[015/040] Iteration[170/200] Loss: 0.3114 Acc:85.23%\n",
      "Training:Epoch[015/040] Iteration[180/200] Loss: 0.3339 Acc:85.29%\n",
      "Training:Epoch[015/040] Iteration[190/200] Loss: 0.3609 Acc:85.19%\n",
      "Training:Epoch[015/040] Iteration[200/200] Loss: 0.3318 Acc:85.20%\n",
      "Valid:\t Epoch[015/040] Iteration[025/025] Loss: 8.5933 【Acc:84.64%】\n",
      "Training:Epoch[016/040] Iteration[010/200] Loss: 0.3499 Acc:84.10%\n",
      "Training:Epoch[016/040] Iteration[020/200] Loss: 0.3247 Acc:84.65%\n",
      "Training:Epoch[016/040] Iteration[030/200] Loss: 0.3423 Acc:84.70%\n",
      "Training:Epoch[016/040] Iteration[040/200] Loss: 0.3388 Acc:84.70%\n",
      "Training:Epoch[016/040] Iteration[050/200] Loss: 0.3232 Acc:84.90%\n",
      "Training:Epoch[016/040] Iteration[060/200] Loss: 0.3497 Acc:85.00%\n",
      "Training:Epoch[016/040] Iteration[070/200] Loss: 0.3382 Acc:84.97%\n",
      "Training:Epoch[016/040] Iteration[080/200] Loss: 0.3439 Acc:85.06%\n",
      "Training:Epoch[016/040] Iteration[090/200] Loss: 0.3227 Acc:85.10%\n",
      "Training:Epoch[016/040] Iteration[100/200] Loss: 0.3383 Acc:85.07%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[016/040] Iteration[110/200] Loss: 0.3260 Acc:85.25%\n",
      "Training:Epoch[016/040] Iteration[120/200] Loss: 0.3151 Acc:85.35%\n",
      "Training:Epoch[016/040] Iteration[130/200] Loss: 0.3535 Acc:85.25%\n",
      "Training:Epoch[016/040] Iteration[140/200] Loss: 0.3371 Acc:85.20%\n",
      "Training:Epoch[016/040] Iteration[150/200] Loss: 0.3273 Acc:85.24%\n",
      "Training:Epoch[016/040] Iteration[160/200] Loss: 0.3236 Acc:85.32%\n",
      "Training:Epoch[016/040] Iteration[170/200] Loss: 0.3251 Acc:85.34%\n",
      "Training:Epoch[016/040] Iteration[180/200] Loss: 0.3233 Acc:85.40%\n",
      "Training:Epoch[016/040] Iteration[190/200] Loss: 0.3310 Acc:85.42%\n",
      "Training:Epoch[016/040] Iteration[200/200] Loss: 0.3581 Acc:85.38%\n",
      "Valid:\t Epoch[016/040] Iteration[025/025] Loss: 8.5675 【Acc:85.00%】\n",
      "Training:Epoch[017/040] Iteration[010/200] Loss: 0.3553 Acc:85.00%\n",
      "Training:Epoch[017/040] Iteration[020/200] Loss: 0.3521 Acc:84.60%\n",
      "Training:Epoch[017/040] Iteration[030/200] Loss: 0.3304 Acc:84.87%\n",
      "Training:Epoch[017/040] Iteration[040/200] Loss: 0.3425 Acc:84.90%\n",
      "Training:Epoch[017/040] Iteration[050/200] Loss: 0.3206 Acc:85.02%\n",
      "Training:Epoch[017/040] Iteration[060/200] Loss: 0.3239 Acc:85.43%\n",
      "Training:Epoch[017/040] Iteration[070/200] Loss: 0.3471 Acc:85.34%\n",
      "Training:Epoch[017/040] Iteration[080/200] Loss: 0.3442 Acc:85.38%\n",
      "Training:Epoch[017/040] Iteration[090/200] Loss: 0.3475 Acc:85.19%\n",
      "Training:Epoch[017/040] Iteration[100/200] Loss: 0.3222 Acc:85.40%\n",
      "Training:Epoch[017/040] Iteration[110/200] Loss: 0.3224 Acc:85.49%\n",
      "Training:Epoch[017/040] Iteration[120/200] Loss: 0.3535 Acc:85.36%\n",
      "Training:Epoch[017/040] Iteration[130/200] Loss: 0.3535 Acc:85.21%\n",
      "Training:Epoch[017/040] Iteration[140/200] Loss: 0.3221 Acc:85.26%\n",
      "Training:Epoch[017/040] Iteration[150/200] Loss: 0.3120 Acc:85.32%\n",
      "Training:Epoch[017/040] Iteration[160/200] Loss: 0.3244 Acc:85.38%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[017/040] Iteration[170/200] Loss: 0.3136 Acc:85.44%\n",
      "Training:Epoch[017/040] Iteration[180/200] Loss: 0.3307 Acc:85.46%\n",
      "Training:Epoch[017/040] Iteration[190/200] Loss: 0.3372 Acc:85.47%\n",
      "Training:Epoch[017/040] Iteration[200/200] Loss: 0.3082 Acc:85.52%\n",
      "Valid:\t Epoch[017/040] Iteration[025/025] Loss: 8.7576 【Acc:84.32%】\n",
      "Training:Epoch[018/040] Iteration[010/200] Loss: 0.3574 Acc:84.60%\n",
      "Training:Epoch[018/040] Iteration[020/200] Loss: 0.3466 Acc:84.45%\n",
      "Training:Epoch[018/040] Iteration[030/200] Loss: 0.3115 Acc:85.17%\n",
      "Training:Epoch[018/040] Iteration[040/200] Loss: 0.3075 Acc:85.80%\n",
      "Training:Epoch[018/040] Iteration[050/200] Loss: 0.3390 Acc:85.62%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[018/040] Iteration[060/200] Loss: 0.3024 Acc:85.57%\n",
      "Training:Epoch[018/040] Iteration[070/200] Loss: 0.3450 Acc:85.50%\n",
      "Training:Epoch[018/040] Iteration[080/200] Loss: 0.3107 Acc:85.64%\n",
      "Training:Epoch[018/040] Iteration[090/200] Loss: 0.3225 Acc:85.70%\n",
      "Training:Epoch[018/040] Iteration[100/200] Loss: 0.3123 Acc:85.75%\n",
      "Training:Epoch[018/040] Iteration[110/200] Loss: 0.3197 Acc:85.78%\n",
      "Training:Epoch[018/040] Iteration[120/200] Loss: 0.3041 Acc:85.86%\n",
      "Training:Epoch[018/040] Iteration[130/200] Loss: 0.3583 Acc:85.78%\n",
      "Training:Epoch[018/040] Iteration[140/200] Loss: 0.3467 Acc:85.71%\n",
      "Training:Epoch[018/040] Iteration[150/200] Loss: 0.3394 Acc:85.66%\n",
      "Training:Epoch[018/040] Iteration[160/200] Loss: 0.3509 Acc:85.61%\n",
      "Training:Epoch[018/040] Iteration[170/200] Loss: 0.3556 Acc:85.53%\n",
      "Training:Epoch[018/040] Iteration[180/200] Loss: 0.3142 Acc:85.60%\n",
      "Training:Epoch[018/040] Iteration[190/200] Loss: 0.3619 Acc:85.55%\n",
      "Training:Epoch[018/040] Iteration[200/200] Loss: 0.3410 Acc:85.49%\n",
      "Valid:\t Epoch[018/040] Iteration[025/025] Loss: 8.6348 【Acc:84.72%】\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[019/040] Iteration[010/200] Loss: 0.3318 Acc:85.40%\n",
      "Training:Epoch[019/040] Iteration[020/200] Loss: 0.3635 Acc:84.75%\n",
      "Training:Epoch[019/040] Iteration[030/200] Loss: 0.3473 Acc:84.80%\n",
      "Training:Epoch[019/040] Iteration[040/200] Loss: 0.3261 Acc:85.15%\n",
      "Training:Epoch[019/040] Iteration[050/200] Loss: 0.3346 Acc:84.96%\n",
      "Training:Epoch[019/040] Iteration[060/200] Loss: 0.3399 Acc:84.82%\n",
      "Training:Epoch[019/040] Iteration[070/200] Loss: 0.3215 Acc:85.01%\n",
      "Training:Epoch[019/040] Iteration[080/200] Loss: 0.3192 Acc:85.31%\n",
      "Training:Epoch[019/040] Iteration[090/200] Loss: 0.3433 Acc:85.11%\n",
      "Training:Epoch[019/040] Iteration[100/200] Loss: 0.3197 Acc:85.33%\n",
      "Training:Epoch[019/040] Iteration[110/200] Loss: 0.3238 Acc:85.44%\n",
      "Training:Epoch[019/040] Iteration[120/200] Loss: 0.3211 Acc:85.50%\n",
      "Training:Epoch[019/040] Iteration[130/200] Loss: 0.3376 Acc:85.55%\n",
      "Training:Epoch[019/040] Iteration[140/200] Loss: 0.3159 Acc:85.62%\n",
      "Training:Epoch[019/040] Iteration[150/200] Loss: 0.2934 Acc:85.75%\n",
      "Training:Epoch[019/040] Iteration[160/200] Loss: 0.3258 Acc:85.82%\n",
      "Training:Epoch[019/040] Iteration[170/200] Loss: 0.3498 Acc:85.71%\n",
      "Training:Epoch[019/040] Iteration[180/200] Loss: 0.3449 Acc:85.71%\n",
      "Training:Epoch[019/040] Iteration[190/200] Loss: 0.3300 Acc:85.70%\n",
      "Training:Epoch[019/040] Iteration[200/200] Loss: 0.2818 Acc:85.83%\n",
      "Valid:\t Epoch[019/040] Iteration[025/025] Loss: 8.3816 【Acc:85.04%】\n",
      "Training:Epoch[020/040] Iteration[010/200] Loss: 0.3095 Acc:87.20%\n",
      "Training:Epoch[020/040] Iteration[020/200] Loss: 0.3003 Acc:87.75%\n",
      "Training:Epoch[020/040] Iteration[030/200] Loss: 0.3199 Acc:87.23%\n",
      "Training:Epoch[020/040] Iteration[040/200] Loss: 0.3361 Acc:86.98%\n",
      "Training:Epoch[020/040] Iteration[050/200] Loss: 0.3273 Acc:86.82%\n",
      "Training:Epoch[020/040] Iteration[060/200] Loss: 0.3351 Acc:86.60%\n",
      "Training:Epoch[020/040] Iteration[070/200] Loss: 0.3146 Acc:86.46%\n",
      "Training:Epoch[020/040] Iteration[080/200] Loss: 0.3143 Acc:86.41%\n",
      "Training:Epoch[020/040] Iteration[090/200] Loss: 0.2961 Acc:86.48%\n",
      "Training:Epoch[020/040] Iteration[100/200] Loss: 0.3119 Acc:86.53%\n",
      "Training:Epoch[020/040] Iteration[110/200] Loss: 0.3247 Acc:86.49%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[020/040] Iteration[120/200] Loss: 0.3217 Acc:86.47%\n",
      "Training:Epoch[020/040] Iteration[130/200] Loss: 0.3374 Acc:86.36%\n",
      "Training:Epoch[020/040] Iteration[140/200] Loss: 0.3262 Acc:86.34%\n",
      "Training:Epoch[020/040] Iteration[150/200] Loss: 0.3157 Acc:86.37%\n",
      "Training:Epoch[020/040] Iteration[160/200] Loss: 0.3037 Acc:86.42%\n",
      "Training:Epoch[020/040] Iteration[170/200] Loss: 0.3356 Acc:86.34%\n",
      "Training:Epoch[020/040] Iteration[180/200] Loss: 0.3526 Acc:86.27%\n",
      "Training:Epoch[020/040] Iteration[190/200] Loss: 0.3243 Acc:86.23%\n",
      "Training:Epoch[020/040] Iteration[200/200] Loss: 0.3194 Acc:86.26%\n",
      "Valid:\t Epoch[020/040] Iteration[025/025] Loss: 8.3638 【Acc:84.80%】\n",
      "Training:Epoch[021/040] Iteration[010/200] Loss: 0.3239 Acc:85.00%\n",
      "Training:Epoch[021/040] Iteration[020/200] Loss: 0.3298 Acc:85.00%\n",
      "Training:Epoch[021/040] Iteration[030/200] Loss: 0.3406 Acc:85.17%\n",
      "Training:Epoch[021/040] Iteration[040/200] Loss: 0.3340 Acc:85.12%\n",
      "Training:Epoch[021/040] Iteration[050/200] Loss: 0.3049 Acc:85.60%\n",
      "Training:Epoch[021/040] Iteration[060/200] Loss: 0.3234 Acc:85.80%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[021/040] Iteration[070/200] Loss: 0.3209 Acc:85.89%\n",
      "Training:Epoch[021/040] Iteration[080/200] Loss: 0.3500 Acc:85.75%\n",
      "Training:Epoch[021/040] Iteration[090/200] Loss: 0.3157 Acc:85.82%\n",
      "Training:Epoch[021/040] Iteration[100/200] Loss: 0.3161 Acc:85.86%\n",
      "Training:Epoch[021/040] Iteration[110/200] Loss: 0.3313 Acc:85.84%\n",
      "Training:Epoch[021/040] Iteration[120/200] Loss: 0.2980 Acc:85.92%\n",
      "Training:Epoch[021/040] Iteration[130/200] Loss: 0.3164 Acc:86.05%\n",
      "Training:Epoch[021/040] Iteration[140/200] Loss: 0.3208 Acc:86.00%\n",
      "Training:Epoch[021/040] Iteration[150/200] Loss: 0.2863 Acc:86.06%\n",
      "Training:Epoch[021/040] Iteration[160/200] Loss: 0.3273 Acc:86.01%\n",
      "Training:Epoch[021/040] Iteration[170/200] Loss: 0.3155 Acc:85.98%\n",
      "Training:Epoch[021/040] Iteration[180/200] Loss: 0.3412 Acc:85.90%\n",
      "Training:Epoch[021/040] Iteration[190/200] Loss: 0.3193 Acc:85.91%\n",
      "Training:Epoch[021/040] Iteration[200/200] Loss: 0.3196 Acc:85.99%\n",
      "Valid:\t Epoch[021/040] Iteration[025/025] Loss: 8.3297 【Acc:85.12%】\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[022/040] Iteration[010/200] Loss: 0.3280 Acc:85.80%\n",
      "Training:Epoch[022/040] Iteration[020/200] Loss: 0.3113 Acc:86.00%\n",
      "Training:Epoch[022/040] Iteration[030/200] Loss: 0.3259 Acc:85.77%\n",
      "Training:Epoch[022/040] Iteration[040/200] Loss: 0.3058 Acc:85.62%\n",
      "Training:Epoch[022/040] Iteration[050/200] Loss: 0.3087 Acc:85.76%\n",
      "Training:Epoch[022/040] Iteration[060/200] Loss: 0.3424 Acc:85.68%\n",
      "Training:Epoch[022/040] Iteration[070/200] Loss: 0.3093 Acc:85.89%\n",
      "Training:Epoch[022/040] Iteration[080/200] Loss: 0.3171 Acc:85.94%\n",
      "Training:Epoch[022/040] Iteration[090/200] Loss: 0.3224 Acc:85.86%\n",
      "Training:Epoch[022/040] Iteration[100/200] Loss: 0.3378 Acc:85.77%\n",
      "Training:Epoch[022/040] Iteration[110/200] Loss: 0.3086 Acc:85.94%\n",
      "Training:Epoch[022/040] Iteration[120/200] Loss: 0.3237 Acc:85.88%\n",
      "Training:Epoch[022/040] Iteration[130/200] Loss: 0.3149 Acc:85.95%\n",
      "Training:Epoch[022/040] Iteration[140/200] Loss: 0.3118 Acc:85.97%\n",
      "Training:Epoch[022/040] Iteration[150/200] Loss: 0.3186 Acc:85.99%\n",
      "Training:Epoch[022/040] Iteration[160/200] Loss: 0.2983 Acc:86.07%\n",
      "Training:Epoch[022/040] Iteration[170/200] Loss: 0.3339 Acc:85.99%\n",
      "Training:Epoch[022/040] Iteration[180/200] Loss: 0.3609 Acc:85.94%\n",
      "Training:Epoch[022/040] Iteration[190/200] Loss: 0.3422 Acc:85.91%\n",
      "Training:Epoch[022/040] Iteration[200/200] Loss: 0.3449 Acc:85.84%\n",
      "Valid:\t Epoch[022/040] Iteration[025/025] Loss: 8.3339 【Acc:85.16%】\n",
      "Training:Epoch[023/040] Iteration[010/200] Loss: 0.3045 Acc:87.00%\n",
      "Training:Epoch[023/040] Iteration[020/200] Loss: 0.3367 Acc:86.30%\n",
      "Training:Epoch[023/040] Iteration[030/200] Loss: 0.3391 Acc:86.23%\n",
      "Training:Epoch[023/040] Iteration[040/200] Loss: 0.3244 Acc:86.25%\n",
      "Training:Epoch[023/040] Iteration[050/200] Loss: 0.3022 Acc:86.48%\n",
      "Training:Epoch[023/040] Iteration[060/200] Loss: 0.3162 Acc:86.42%\n",
      "Training:Epoch[023/040] Iteration[070/200] Loss: 0.3421 Acc:86.31%\n",
      "Training:Epoch[023/040] Iteration[080/200] Loss: 0.3299 Acc:86.36%\n",
      "Training:Epoch[023/040] Iteration[090/200] Loss: 0.3238 Acc:86.23%\n",
      "Training:Epoch[023/040] Iteration[100/200] Loss: 0.3529 Acc:85.93%\n",
      "Training:Epoch[023/040] Iteration[110/200] Loss: 0.3164 Acc:86.04%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[023/040] Iteration[120/200] Loss: 0.3056 Acc:86.12%\n",
      "Training:Epoch[023/040] Iteration[130/200] Loss: 0.2972 Acc:86.24%\n",
      "Training:Epoch[023/040] Iteration[140/200] Loss: 0.2761 Acc:86.38%\n",
      "Training:Epoch[023/040] Iteration[150/200] Loss: 0.3324 Acc:86.32%\n",
      "Training:Epoch[023/040] Iteration[160/200] Loss: 0.3127 Acc:86.33%\n",
      "Training:Epoch[023/040] Iteration[170/200] Loss: 0.3239 Acc:86.29%\n",
      "Training:Epoch[023/040] Iteration[180/200] Loss: 0.3130 Acc:86.28%\n",
      "Training:Epoch[023/040] Iteration[190/200] Loss: 0.3237 Acc:86.33%\n",
      "Training:Epoch[023/040] Iteration[200/200] Loss: 0.3660 Acc:86.21%\n",
      "Valid:\t Epoch[023/040] Iteration[025/025] Loss: 8.3253 【Acc:85.36%】\n",
      "Training:Epoch[024/040] Iteration[010/200] Loss: 0.2820 Acc:87.40%\n",
      "Training:Epoch[024/040] Iteration[020/200] Loss: 0.3083 Acc:87.10%\n",
      "Training:Epoch[024/040] Iteration[030/200] Loss: 0.3045 Acc:87.00%\n",
      "Training:Epoch[024/040] Iteration[040/200] Loss: 0.3004 Acc:87.12%\n",
      "Training:Epoch[024/040] Iteration[050/200] Loss: 0.3231 Acc:86.78%\n",
      "Training:Epoch[024/040] Iteration[060/200] Loss: 0.3186 Acc:86.63%\n",
      "Training:Epoch[024/040] Iteration[070/200] Loss: 0.3479 Acc:86.36%\n",
      "Training:Epoch[024/040] Iteration[080/200] Loss: 0.3127 Acc:86.31%\n",
      "Training:Epoch[024/040] Iteration[090/200] Loss: 0.3383 Acc:86.29%\n",
      "Training:Epoch[024/040] Iteration[100/200] Loss: 0.3223 Acc:86.28%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[024/040] Iteration[110/200] Loss: 0.3053 Acc:86.38%\n",
      "Training:Epoch[024/040] Iteration[120/200] Loss: 0.3248 Acc:86.29%\n",
      "Training:Epoch[024/040] Iteration[130/200] Loss: 0.3095 Acc:86.31%\n",
      "Training:Epoch[024/040] Iteration[140/200] Loss: 0.3303 Acc:86.29%\n",
      "Training:Epoch[024/040] Iteration[150/200] Loss: 0.3245 Acc:86.28%\n",
      "Training:Epoch[024/040] Iteration[160/200] Loss: 0.2952 Acc:86.36%\n",
      "Training:Epoch[024/040] Iteration[170/200] Loss: 0.3338 Acc:86.34%\n",
      "Training:Epoch[024/040] Iteration[180/200] Loss: 0.3365 Acc:86.33%\n",
      "Training:Epoch[024/040] Iteration[190/200] Loss: 0.3350 Acc:86.27%\n",
      "Training:Epoch[024/040] Iteration[200/200] Loss: 0.3600 Acc:86.15%\n",
      "Valid:\t Epoch[024/040] Iteration[025/025] Loss: 8.3328 【Acc:85.24%】\n",
      "Training:Epoch[025/040] Iteration[010/200] Loss: 0.2932 Acc:88.00%\n",
      "Training:Epoch[025/040] Iteration[020/200] Loss: 0.2988 Acc:87.20%\n",
      "Training:Epoch[025/040] Iteration[030/200] Loss: 0.2905 Acc:87.07%\n",
      "Training:Epoch[025/040] Iteration[040/200] Loss: 0.2783 Acc:87.22%\n",
      "Training:Epoch[025/040] Iteration[050/200] Loss: 0.3226 Acc:86.78%\n",
      "Training:Epoch[025/040] Iteration[060/200] Loss: 0.3312 Acc:86.67%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[025/040] Iteration[070/200] Loss: 0.3117 Acc:86.61%\n",
      "Training:Epoch[025/040] Iteration[080/200] Loss: 0.3350 Acc:86.50%\n",
      "Training:Epoch[025/040] Iteration[090/200] Loss: 0.3297 Acc:86.41%\n",
      "Training:Epoch[025/040] Iteration[100/200] Loss: 0.3247 Acc:86.30%\n",
      "Training:Epoch[025/040] Iteration[110/200] Loss: 0.3312 Acc:86.34%\n",
      "Training:Epoch[025/040] Iteration[120/200] Loss: 0.3366 Acc:86.23%\n",
      "Training:Epoch[025/040] Iteration[130/200] Loss: 0.3471 Acc:86.08%\n",
      "Training:Epoch[025/040] Iteration[140/200] Loss: 0.3179 Acc:86.12%\n",
      "Training:Epoch[025/040] Iteration[150/200] Loss: 0.3264 Acc:86.09%\n",
      "Training:Epoch[025/040] Iteration[160/200] Loss: 0.3364 Acc:86.02%\n",
      "Training:Epoch[025/040] Iteration[170/200] Loss: 0.2951 Acc:86.23%\n",
      "Training:Epoch[025/040] Iteration[180/200] Loss: 0.3515 Acc:86.16%\n",
      "Training:Epoch[025/040] Iteration[190/200] Loss: 0.3295 Acc:86.14%\n",
      "Training:Epoch[025/040] Iteration[200/200] Loss: 0.3289 Acc:86.15%\n",
      "Valid:\t Epoch[025/040] Iteration[025/025] Loss: 8.4206 【Acc:84.76%】\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[026/040] Iteration[010/200] Loss: 0.3174 Acc:86.00%\n",
      "Training:Epoch[026/040] Iteration[020/200] Loss: 0.3192 Acc:86.15%\n",
      "Training:Epoch[026/040] Iteration[030/200] Loss: 0.2990 Acc:86.60%\n",
      "Training:Epoch[026/040] Iteration[040/200] Loss: 0.3094 Acc:86.48%\n",
      "Training:Epoch[026/040] Iteration[050/200] Loss: 0.3243 Acc:86.44%\n",
      "Training:Epoch[026/040] Iteration[060/200] Loss: 0.3352 Acc:86.33%\n",
      "Training:Epoch[026/040] Iteration[070/200] Loss: 0.3154 Acc:86.34%\n",
      "Training:Epoch[026/040] Iteration[080/200] Loss: 0.3142 Acc:86.31%\n",
      "Training:Epoch[026/040] Iteration[090/200] Loss: 0.3245 Acc:86.27%\n",
      "Training:Epoch[026/040] Iteration[100/200] Loss: 0.3086 Acc:86.25%\n",
      "Training:Epoch[026/040] Iteration[110/200] Loss: 0.3248 Acc:86.36%\n",
      "Training:Epoch[026/040] Iteration[120/200] Loss: 0.3184 Acc:86.31%\n",
      "Training:Epoch[026/040] Iteration[130/200] Loss: 0.3463 Acc:86.21%\n",
      "Training:Epoch[026/040] Iteration[140/200] Loss: 0.2961 Acc:86.25%\n",
      "Training:Epoch[026/040] Iteration[150/200] Loss: 0.3320 Acc:86.25%\n",
      "Training:Epoch[026/040] Iteration[160/200] Loss: 0.3190 Acc:86.19%\n",
      "Training:Epoch[026/040] Iteration[170/200] Loss: 0.3214 Acc:86.17%\n",
      "Training:Epoch[026/040] Iteration[180/200] Loss: 0.3167 Acc:86.26%\n",
      "Training:Epoch[026/040] Iteration[190/200] Loss: 0.2954 Acc:86.37%\n",
      "Training:Epoch[026/040] Iteration[200/200] Loss: 0.2931 Acc:86.43%\n",
      "Valid:\t Epoch[026/040] Iteration[025/025] Loss: 8.3373 【Acc:85.00%】\n",
      "Training:Epoch[027/040] Iteration[010/200] Loss: 0.2938 Acc:88.30%\n",
      "Training:Epoch[027/040] Iteration[020/200] Loss: 0.3044 Acc:87.60%\n",
      "Training:Epoch[027/040] Iteration[030/200] Loss: 0.3405 Acc:86.93%\n",
      "Training:Epoch[027/040] Iteration[040/200] Loss: 0.3335 Acc:86.70%\n",
      "Training:Epoch[027/040] Iteration[050/200] Loss: 0.3092 Acc:86.76%\n",
      "Training:Epoch[027/040] Iteration[060/200] Loss: 0.2979 Acc:86.82%\n",
      "Training:Epoch[027/040] Iteration[070/200] Loss: 0.3298 Acc:86.63%\n",
      "Training:Epoch[027/040] Iteration[080/200] Loss: 0.3055 Acc:86.71%\n",
      "Training:Epoch[027/040] Iteration[090/200] Loss: 0.2991 Acc:86.77%\n",
      "Training:Epoch[027/040] Iteration[100/200] Loss: 0.2970 Acc:86.75%\n",
      "Training:Epoch[027/040] Iteration[110/200] Loss: 0.3266 Acc:86.65%\n",
      "Training:Epoch[027/040] Iteration[120/200] Loss: 0.3099 Acc:86.65%\n",
      "Training:Epoch[027/040] Iteration[130/200] Loss: 0.2957 Acc:86.64%\n",
      "Training:Epoch[027/040] Iteration[140/200] Loss: 0.3157 Acc:86.66%\n",
      "Training:Epoch[027/040] Iteration[150/200] Loss: 0.3498 Acc:86.56%\n",
      "Training:Epoch[027/040] Iteration[160/200] Loss: 0.3234 Acc:86.48%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[027/040] Iteration[170/200] Loss: 0.3099 Acc:86.43%\n",
      "Training:Epoch[027/040] Iteration[180/200] Loss: 0.3189 Acc:86.44%\n",
      "Training:Epoch[027/040] Iteration[190/200] Loss: 0.3318 Acc:86.46%\n",
      "Training:Epoch[027/040] Iteration[200/200] Loss: 0.2944 Acc:86.48%\n",
      "Valid:\t Epoch[027/040] Iteration[025/025] Loss: 8.2966 【Acc:85.36%】\n",
      "Training:Epoch[028/040] Iteration[010/200] Loss: 0.3343 Acc:84.60%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[028/040] Iteration[020/200] Loss: 0.3084 Acc:85.50%\n",
      "Training:Epoch[028/040] Iteration[030/200] Loss: 0.3183 Acc:85.50%\n",
      "Training:Epoch[028/040] Iteration[040/200] Loss: 0.3144 Acc:85.75%\n",
      "Training:Epoch[028/040] Iteration[050/200] Loss: 0.2955 Acc:86.04%\n",
      "Training:Epoch[028/040] Iteration[060/200] Loss: 0.3124 Acc:86.15%\n",
      "Training:Epoch[028/040] Iteration[070/200] Loss: 0.3143 Acc:86.16%\n",
      "Training:Epoch[028/040] Iteration[080/200] Loss: 0.3295 Acc:86.30%\n",
      "Training:Epoch[028/040] Iteration[090/200] Loss: 0.3255 Acc:86.19%\n",
      "Training:Epoch[028/040] Iteration[100/200] Loss: 0.3444 Acc:86.05%\n",
      "Training:Epoch[028/040] Iteration[110/200] Loss: 0.3123 Acc:86.00%\n",
      "Training:Epoch[028/040] Iteration[120/200] Loss: 0.2736 Acc:86.13%\n",
      "Training:Epoch[028/040] Iteration[130/200] Loss: 0.3194 Acc:86.03%\n",
      "Training:Epoch[028/040] Iteration[140/200] Loss: 0.2939 Acc:86.18%\n",
      "Training:Epoch[028/040] Iteration[150/200] Loss: 0.3333 Acc:86.11%\n",
      "Training:Epoch[028/040] Iteration[160/200] Loss: 0.2763 Acc:86.26%\n",
      "Training:Epoch[028/040] Iteration[170/200] Loss: 0.3519 Acc:86.14%\n",
      "Training:Epoch[028/040] Iteration[180/200] Loss: 0.3278 Acc:86.12%\n",
      "Training:Epoch[028/040] Iteration[190/200] Loss: 0.3277 Acc:86.13%\n",
      "Training:Epoch[028/040] Iteration[200/200] Loss: 0.3153 Acc:86.14%\n",
      "Valid:\t Epoch[028/040] Iteration[025/025] Loss: 8.3271 【Acc:85.16%】\n",
      "Training:Epoch[029/040] Iteration[010/200] Loss: 0.2821 Acc:88.30%\n",
      "Training:Epoch[029/040] Iteration[020/200] Loss: 0.3378 Acc:87.10%\n",
      "Training:Epoch[029/040] Iteration[030/200] Loss: 0.3217 Acc:86.80%\n",
      "Training:Epoch[029/040] Iteration[040/200] Loss: 0.3000 Acc:86.98%\n",
      "Training:Epoch[029/040] Iteration[050/200] Loss: 0.3387 Acc:86.46%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[029/040] Iteration[060/200] Loss: 0.2861 Acc:86.53%\n",
      "Training:Epoch[029/040] Iteration[070/200] Loss: 0.3235 Acc:86.47%\n",
      "Training:Epoch[029/040] Iteration[080/200] Loss: 0.3123 Acc:86.56%\n",
      "Training:Epoch[029/040] Iteration[090/200] Loss: 0.3116 Acc:86.48%\n",
      "Training:Epoch[029/040] Iteration[100/200] Loss: 0.3071 Acc:86.59%\n",
      "Training:Epoch[029/040] Iteration[110/200] Loss: 0.3257 Acc:86.59%\n",
      "Training:Epoch[029/040] Iteration[120/200] Loss: 0.3264 Acc:86.57%\n",
      "Training:Epoch[029/040] Iteration[130/200] Loss: 0.3152 Acc:86.55%\n",
      "Training:Epoch[029/040] Iteration[140/200] Loss: 0.3211 Acc:86.44%\n",
      "Training:Epoch[029/040] Iteration[150/200] Loss: 0.3307 Acc:86.37%\n",
      "Training:Epoch[029/040] Iteration[160/200] Loss: 0.3293 Acc:86.38%\n",
      "Training:Epoch[029/040] Iteration[170/200] Loss: 0.3207 Acc:86.42%\n",
      "Training:Epoch[029/040] Iteration[180/200] Loss: 0.3298 Acc:86.34%\n",
      "Training:Epoch[029/040] Iteration[190/200] Loss: 0.3492 Acc:86.27%\n",
      "Training:Epoch[029/040] Iteration[200/200] Loss: 0.3109 Acc:86.26%\n",
      "Valid:\t Epoch[029/040] Iteration[025/025] Loss: 8.2798 【Acc:85.56%】\n",
      "Training:Epoch[030/040] Iteration[010/200] Loss: 0.3175 Acc:85.50%\n",
      "Training:Epoch[030/040] Iteration[020/200] Loss: 0.3184 Acc:86.05%\n",
      "Training:Epoch[030/040] Iteration[030/200] Loss: 0.3219 Acc:86.13%\n",
      "Training:Epoch[030/040] Iteration[040/200] Loss: 0.3250 Acc:85.90%\n",
      "Training:Epoch[030/040] Iteration[050/200] Loss: 0.3152 Acc:85.92%\n",
      "Training:Epoch[030/040] Iteration[060/200] Loss: 0.3304 Acc:85.62%\n",
      "Training:Epoch[030/040] Iteration[070/200] Loss: 0.3015 Acc:85.97%\n",
      "Training:Epoch[030/040] Iteration[080/200] Loss: 0.2841 Acc:86.24%\n",
      "Training:Epoch[030/040] Iteration[090/200] Loss: 0.3032 Acc:86.38%\n",
      "Training:Epoch[030/040] Iteration[100/200] Loss: 0.3149 Acc:86.39%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[030/040] Iteration[110/200] Loss: 0.3396 Acc:86.29%\n",
      "Training:Epoch[030/040] Iteration[120/200] Loss: 0.2988 Acc:86.30%\n",
      "Training:Epoch[030/040] Iteration[130/200] Loss: 0.3149 Acc:86.29%\n",
      "Training:Epoch[030/040] Iteration[140/200] Loss: 0.3278 Acc:86.27%\n",
      "Training:Epoch[030/040] Iteration[150/200] Loss: 0.3128 Acc:86.25%\n",
      "Training:Epoch[030/040] Iteration[160/200] Loss: 0.2894 Acc:86.36%\n",
      "Training:Epoch[030/040] Iteration[170/200] Loss: 0.3181 Acc:86.34%\n",
      "Training:Epoch[030/040] Iteration[180/200] Loss: 0.3223 Acc:86.32%\n",
      "Training:Epoch[030/040] Iteration[190/200] Loss: 0.2980 Acc:86.39%\n",
      "Training:Epoch[030/040] Iteration[200/200] Loss: 0.3397 Acc:86.29%\n",
      "Valid:\t Epoch[030/040] Iteration[025/025] Loss: 8.2928 【Acc:85.56%】\n",
      "Training:Epoch[031/040] Iteration[010/200] Loss: 0.3140 Acc:87.00%\n",
      "Training:Epoch[031/040] Iteration[020/200] Loss: 0.3141 Acc:87.05%\n",
      "Training:Epoch[031/040] Iteration[030/200] Loss: 0.3687 Acc:85.70%\n",
      "Training:Epoch[031/040] Iteration[040/200] Loss: 0.3426 Acc:85.40%\n",
      "Training:Epoch[031/040] Iteration[050/200] Loss: 0.3256 Acc:85.58%\n",
      "Training:Epoch[031/040] Iteration[060/200] Loss: 0.3014 Acc:85.75%\n",
      "Training:Epoch[031/040] Iteration[070/200] Loss: 0.3129 Acc:85.87%\n",
      "Training:Epoch[031/040] Iteration[080/200] Loss: 0.3257 Acc:85.86%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[031/040] Iteration[090/200] Loss: 0.3051 Acc:85.99%\n",
      "Training:Epoch[031/040] Iteration[100/200] Loss: 0.3283 Acc:85.98%\n",
      "Training:Epoch[031/040] Iteration[110/200] Loss: 0.2966 Acc:86.10%\n",
      "Training:Epoch[031/040] Iteration[120/200] Loss: 0.3068 Acc:86.22%\n",
      "Training:Epoch[031/040] Iteration[130/200] Loss: 0.3326 Acc:86.18%\n",
      "Training:Epoch[031/040] Iteration[140/200] Loss: 0.3249 Acc:86.21%\n",
      "Training:Epoch[031/040] Iteration[150/200] Loss: 0.2940 Acc:86.33%\n",
      "Training:Epoch[031/040] Iteration[160/200] Loss: 0.3009 Acc:86.33%\n",
      "Training:Epoch[031/040] Iteration[170/200] Loss: 0.3046 Acc:86.34%\n",
      "Training:Epoch[031/040] Iteration[180/200] Loss: 0.3163 Acc:86.36%\n",
      "Training:Epoch[031/040] Iteration[190/200] Loss: 0.3844 Acc:86.17%\n",
      "Training:Epoch[031/040] Iteration[200/200] Loss: 0.3195 Acc:86.19%\n",
      "Valid:\t Epoch[031/040] Iteration[025/025] Loss: 8.3218 【Acc:85.16%】\n",
      "Training:Epoch[032/040] Iteration[010/200] Loss: 0.3067 Acc:87.30%\n",
      "Training:Epoch[032/040] Iteration[020/200] Loss: 0.3204 Acc:86.75%\n",
      "Training:Epoch[032/040] Iteration[030/200] Loss: 0.3284 Acc:86.30%\n",
      "Training:Epoch[032/040] Iteration[040/200] Loss: 0.3311 Acc:86.12%\n",
      "Training:Epoch[032/040] Iteration[050/200] Loss: 0.2950 Acc:86.32%\n",
      "Training:Epoch[032/040] Iteration[060/200] Loss: 0.3214 Acc:86.22%\n",
      "Training:Epoch[032/040] Iteration[070/200] Loss: 0.3089 Acc:86.44%\n",
      "Training:Epoch[032/040] Iteration[080/200] Loss: 0.3103 Acc:86.50%\n",
      "Training:Epoch[032/040] Iteration[090/200] Loss: 0.3183 Acc:86.47%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[032/040] Iteration[100/200] Loss: 0.3060 Acc:86.48%\n",
      "Training:Epoch[032/040] Iteration[110/200] Loss: 0.3249 Acc:86.43%\n",
      "Training:Epoch[032/040] Iteration[120/200] Loss: 0.3406 Acc:86.33%\n",
      "Training:Epoch[032/040] Iteration[130/200] Loss: 0.3283 Acc:86.35%\n",
      "Training:Epoch[032/040] Iteration[140/200] Loss: 0.3323 Acc:86.31%\n",
      "Training:Epoch[032/040] Iteration[150/200] Loss: 0.3251 Acc:86.25%\n",
      "Training:Epoch[032/040] Iteration[160/200] Loss: 0.3433 Acc:86.26%\n",
      "Training:Epoch[032/040] Iteration[170/200] Loss: 0.2893 Acc:86.31%\n",
      "Training:Epoch[032/040] Iteration[180/200] Loss: 0.3274 Acc:86.32%\n",
      "Training:Epoch[032/040] Iteration[190/200] Loss: 0.2988 Acc:86.28%\n",
      "Training:Epoch[032/040] Iteration[200/200] Loss: 0.3138 Acc:86.31%\n",
      "Valid:\t Epoch[032/040] Iteration[025/025] Loss: 8.2960 【Acc:85.40%】\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[033/040] Iteration[010/200] Loss: 0.3226 Acc:85.90%\n",
      "Training:Epoch[033/040] Iteration[020/200] Loss: 0.3121 Acc:86.55%\n",
      "Training:Epoch[033/040] Iteration[030/200] Loss: 0.3159 Acc:86.23%\n",
      "Training:Epoch[033/040] Iteration[040/200] Loss: 0.2941 Acc:86.42%\n",
      "Training:Epoch[033/040] Iteration[050/200] Loss: 0.3274 Acc:86.26%\n",
      "Training:Epoch[033/040] Iteration[060/200] Loss: 0.3242 Acc:86.18%\n",
      "Training:Epoch[033/040] Iteration[070/200] Loss: 0.3047 Acc:86.40%\n",
      "Training:Epoch[033/040] Iteration[080/200] Loss: 0.3292 Acc:86.29%\n",
      "Training:Epoch[033/040] Iteration[090/200] Loss: 0.3317 Acc:86.13%\n",
      "Training:Epoch[033/040] Iteration[100/200] Loss: 0.3191 Acc:86.11%\n",
      "Training:Epoch[033/040] Iteration[110/200] Loss: 0.3219 Acc:86.05%\n",
      "Training:Epoch[033/040] Iteration[120/200] Loss: 0.3329 Acc:86.02%\n",
      "Training:Epoch[033/040] Iteration[130/200] Loss: 0.3040 Acc:86.10%\n",
      "Training:Epoch[033/040] Iteration[140/200] Loss: 0.3320 Acc:86.05%\n",
      "Training:Epoch[033/040] Iteration[150/200] Loss: 0.3224 Acc:86.11%\n",
      "Training:Epoch[033/040] Iteration[160/200] Loss: 0.3214 Acc:86.12%\n",
      "Training:Epoch[033/040] Iteration[170/200] Loss: 0.3226 Acc:86.12%\n",
      "Training:Epoch[033/040] Iteration[180/200] Loss: 0.3313 Acc:86.11%\n",
      "Training:Epoch[033/040] Iteration[190/200] Loss: 0.3058 Acc:86.17%\n",
      "Training:Epoch[033/040] Iteration[200/200] Loss: 0.3326 Acc:86.12%\n",
      "Valid:\t Epoch[033/040] Iteration[025/025] Loss: 8.2913 【Acc:85.48%】\n",
      "Training:Epoch[034/040] Iteration[010/200] Loss: 0.3156 Acc:86.50%\n",
      "Training:Epoch[034/040] Iteration[020/200] Loss: 0.3026 Acc:87.15%\n",
      "Training:Epoch[034/040] Iteration[030/200] Loss: 0.3534 Acc:86.30%\n",
      "Training:Epoch[034/040] Iteration[040/200] Loss: 0.2997 Acc:86.58%\n",
      "Training:Epoch[034/040] Iteration[050/200] Loss: 0.3304 Acc:86.58%\n",
      "Training:Epoch[034/040] Iteration[060/200] Loss: 0.2978 Acc:86.47%\n",
      "Training:Epoch[034/040] Iteration[070/200] Loss: 0.3119 Acc:86.41%\n",
      "Training:Epoch[034/040] Iteration[080/200] Loss: 0.3163 Acc:86.35%\n",
      "Training:Epoch[034/040] Iteration[090/200] Loss: 0.3105 Acc:86.57%\n",
      "Training:Epoch[034/040] Iteration[100/200] Loss: 0.3679 Acc:86.27%\n",
      "Training:Epoch[034/040] Iteration[110/200] Loss: 0.2992 Acc:86.42%\n",
      "Training:Epoch[034/040] Iteration[120/200] Loss: 0.3384 Acc:86.42%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[034/040] Iteration[130/200] Loss: 0.2713 Acc:86.58%\n",
      "Training:Epoch[034/040] Iteration[140/200] Loss: 0.2963 Acc:86.64%\n",
      "Training:Epoch[034/040] Iteration[150/200] Loss: 0.3056 Acc:86.64%\n",
      "Training:Epoch[034/040] Iteration[160/200] Loss: 0.3239 Acc:86.61%\n",
      "Training:Epoch[034/040] Iteration[170/200] Loss: 0.3113 Acc:86.69%\n",
      "Training:Epoch[034/040] Iteration[180/200] Loss: 0.3214 Acc:86.71%\n",
      "Training:Epoch[034/040] Iteration[190/200] Loss: 0.3599 Acc:86.55%\n",
      "Training:Epoch[034/040] Iteration[200/200] Loss: 0.3194 Acc:86.55%\n",
      "Valid:\t Epoch[034/040] Iteration[025/025] Loss: 8.3261 【Acc:85.20%】\n",
      "Training:Epoch[035/040] Iteration[010/200] Loss: 0.3100 Acc:85.40%\n",
      "Training:Epoch[035/040] Iteration[020/200] Loss: 0.3031 Acc:85.65%\n",
      "Training:Epoch[035/040] Iteration[030/200] Loss: 0.3026 Acc:86.17%\n",
      "Training:Epoch[035/040] Iteration[040/200] Loss: 0.2996 Acc:86.52%\n",
      "Training:Epoch[035/040] Iteration[050/200] Loss: 0.3205 Acc:86.40%\n",
      "Training:Epoch[035/040] Iteration[060/200] Loss: 0.3314 Acc:86.18%\n",
      "Training:Epoch[035/040] Iteration[070/200] Loss: 0.3095 Acc:86.19%\n",
      "Training:Epoch[035/040] Iteration[080/200] Loss: 0.2997 Acc:86.28%\n",
      "Training:Epoch[035/040] Iteration[090/200] Loss: 0.3277 Acc:86.27%\n",
      "Training:Epoch[035/040] Iteration[100/200] Loss: 0.2957 Acc:86.31%\n",
      "Training:Epoch[035/040] Iteration[110/200] Loss: 0.3273 Acc:86.23%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[035/040] Iteration[120/200] Loss: 0.3314 Acc:86.25%\n",
      "Training:Epoch[035/040] Iteration[130/200] Loss: 0.3191 Acc:86.29%\n",
      "Training:Epoch[035/040] Iteration[140/200] Loss: 0.3341 Acc:86.26%\n",
      "Training:Epoch[035/040] Iteration[150/200] Loss: 0.3481 Acc:86.13%\n",
      "Training:Epoch[035/040] Iteration[160/200] Loss: 0.2962 Acc:86.23%\n",
      "Training:Epoch[035/040] Iteration[170/200] Loss: 0.3120 Acc:86.28%\n",
      "Training:Epoch[035/040] Iteration[180/200] Loss: 0.3183 Acc:86.30%\n",
      "Training:Epoch[035/040] Iteration[190/200] Loss: 0.3103 Acc:86.31%\n",
      "Training:Epoch[035/040] Iteration[200/200] Loss: 0.3245 Acc:86.29%\n",
      "Valid:\t Epoch[035/040] Iteration[025/025] Loss: 8.3045 【Acc:85.32%】\n",
      "Training:Epoch[036/040] Iteration[010/200] Loss: 0.3153 Acc:86.90%\n",
      "Training:Epoch[036/040] Iteration[020/200] Loss: 0.3113 Acc:87.25%\n",
      "Training:Epoch[036/040] Iteration[030/200] Loss: 0.3168 Acc:87.20%\n",
      "Training:Epoch[036/040] Iteration[040/200] Loss: 0.3272 Acc:87.05%\n",
      "Training:Epoch[036/040] Iteration[050/200] Loss: 0.3073 Acc:86.70%\n",
      "Training:Epoch[036/040] Iteration[060/200] Loss: 0.3302 Acc:86.48%\n",
      "Training:Epoch[036/040] Iteration[070/200] Loss: 0.3050 Acc:86.49%\n",
      "Training:Epoch[036/040] Iteration[080/200] Loss: 0.3067 Acc:86.44%\n",
      "Training:Epoch[036/040] Iteration[090/200] Loss: 0.3291 Acc:86.40%\n",
      "Training:Epoch[036/040] Iteration[100/200] Loss: 0.3179 Acc:86.42%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[036/040] Iteration[110/200] Loss: 0.2973 Acc:86.53%\n",
      "Training:Epoch[036/040] Iteration[120/200] Loss: 0.2930 Acc:86.62%\n",
      "Training:Epoch[036/040] Iteration[130/200] Loss: 0.3205 Acc:86.66%\n",
      "Training:Epoch[036/040] Iteration[140/200] Loss: 0.3365 Acc:86.59%\n",
      "Training:Epoch[036/040] Iteration[150/200] Loss: 0.3138 Acc:86.62%\n",
      "Training:Epoch[036/040] Iteration[160/200] Loss: 0.3267 Acc:86.60%\n",
      "Training:Epoch[036/040] Iteration[170/200] Loss: 0.3310 Acc:86.49%\n",
      "Training:Epoch[036/040] Iteration[180/200] Loss: 0.3252 Acc:86.49%\n",
      "Training:Epoch[036/040] Iteration[190/200] Loss: 0.3073 Acc:86.49%\n",
      "Training:Epoch[036/040] Iteration[200/200] Loss: 0.2896 Acc:86.51%\n",
      "Valid:\t Epoch[036/040] Iteration[025/025] Loss: 8.3141 【Acc:85.00%】\n",
      "Training:Epoch[037/040] Iteration[010/200] Loss: 0.3092 Acc:86.70%\n",
      "Training:Epoch[037/040] Iteration[020/200] Loss: 0.3084 Acc:87.05%\n",
      "Training:Epoch[037/040] Iteration[030/200] Loss: 0.3396 Acc:85.97%\n",
      "Training:Epoch[037/040] Iteration[040/200] Loss: 0.3020 Acc:86.12%\n",
      "Training:Epoch[037/040] Iteration[050/200] Loss: 0.3191 Acc:86.26%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[037/040] Iteration[060/200] Loss: 0.3189 Acc:86.32%\n",
      "Training:Epoch[037/040] Iteration[070/200] Loss: 0.2756 Acc:86.64%\n",
      "Training:Epoch[037/040] Iteration[080/200] Loss: 0.3121 Acc:86.65%\n",
      "Training:Epoch[037/040] Iteration[090/200] Loss: 0.3297 Acc:86.64%\n",
      "Training:Epoch[037/040] Iteration[100/200] Loss: 0.2870 Acc:86.83%\n",
      "Training:Epoch[037/040] Iteration[110/200] Loss: 0.3439 Acc:86.61%\n",
      "Training:Epoch[037/040] Iteration[120/200] Loss: 0.3032 Acc:86.63%\n",
      "Training:Epoch[037/040] Iteration[130/200] Loss: 0.3199 Acc:86.56%\n",
      "Training:Epoch[037/040] Iteration[140/200] Loss: 0.3318 Acc:86.50%\n",
      "Training:Epoch[037/040] Iteration[150/200] Loss: 0.2910 Acc:86.58%\n",
      "Training:Epoch[037/040] Iteration[160/200] Loss: 0.3239 Acc:86.54%\n",
      "Training:Epoch[037/040] Iteration[170/200] Loss: 0.3303 Acc:86.51%\n",
      "Training:Epoch[037/040] Iteration[180/200] Loss: 0.3248 Acc:86.48%\n",
      "Training:Epoch[037/040] Iteration[190/200] Loss: 0.3107 Acc:86.49%\n",
      "Training:Epoch[037/040] Iteration[200/200] Loss: 0.3320 Acc:86.48%\n",
      "Valid:\t Epoch[037/040] Iteration[025/025] Loss: 8.2937 【Acc:85.44%】\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[038/040] Iteration[010/200] Loss: 0.2869 Acc:88.30%\n",
      "Training:Epoch[038/040] Iteration[020/200] Loss: 0.3241 Acc:87.30%\n",
      "Training:Epoch[038/040] Iteration[030/200] Loss: 0.3188 Acc:87.07%\n",
      "Training:Epoch[038/040] Iteration[040/200] Loss: 0.3131 Acc:86.95%\n",
      "Training:Epoch[038/040] Iteration[050/200] Loss: 0.3053 Acc:87.08%\n",
      "Training:Epoch[038/040] Iteration[060/200] Loss: 0.3165 Acc:86.97%\n",
      "Training:Epoch[038/040] Iteration[070/200] Loss: 0.3252 Acc:86.89%\n",
      "Training:Epoch[038/040] Iteration[080/200] Loss: 0.3171 Acc:86.80%\n",
      "Training:Epoch[038/040] Iteration[090/200] Loss: 0.3342 Acc:86.64%\n",
      "Training:Epoch[038/040] Iteration[100/200] Loss: 0.3126 Acc:86.64%\n",
      "Training:Epoch[038/040] Iteration[110/200] Loss: 0.3111 Acc:86.55%\n",
      "Training:Epoch[038/040] Iteration[120/200] Loss: 0.3114 Acc:86.56%\n",
      "Training:Epoch[038/040] Iteration[130/200] Loss: 0.2979 Acc:86.60%\n",
      "Training:Epoch[038/040] Iteration[140/200] Loss: 0.3489 Acc:86.48%\n",
      "Training:Epoch[038/040] Iteration[150/200] Loss: 0.3247 Acc:86.34%\n",
      "Training:Epoch[038/040] Iteration[160/200] Loss: 0.2997 Acc:86.40%\n",
      "Training:Epoch[038/040] Iteration[170/200] Loss: 0.3426 Acc:86.34%\n",
      "Training:Epoch[038/040] Iteration[180/200] Loss: 0.3137 Acc:86.37%\n",
      "Training:Epoch[038/040] Iteration[190/200] Loss: 0.3482 Acc:86.28%\n",
      "Training:Epoch[038/040] Iteration[200/200] Loss: 0.3470 Acc:86.20%\n",
      "Valid:\t Epoch[038/040] Iteration[025/025] Loss: 8.2915 【Acc:85.32%】\n",
      "Training:Epoch[039/040] Iteration[010/200] Loss: 0.3268 Acc:86.20%\n",
      "Training:Epoch[039/040] Iteration[020/200] Loss: 0.3101 Acc:86.75%\n",
      "Training:Epoch[039/040] Iteration[030/200] Loss: 0.3470 Acc:85.90%\n",
      "Training:Epoch[039/040] Iteration[040/200] Loss: 0.3025 Acc:85.97%\n",
      "Training:Epoch[039/040] Iteration[050/200] Loss: 0.3303 Acc:85.92%\n",
      "Training:Epoch[039/040] Iteration[060/200] Loss: 0.3261 Acc:86.05%\n",
      "Training:Epoch[039/040] Iteration[070/200] Loss: 0.3188 Acc:86.19%\n",
      "Training:Epoch[039/040] Iteration[080/200] Loss: 0.3162 Acc:86.21%\n",
      "Training:Epoch[039/040] Iteration[090/200] Loss: 0.2936 Acc:86.34%\n",
      "Training:Epoch[039/040] Iteration[100/200] Loss: 0.3219 Acc:86.32%\n",
      "Training:Epoch[039/040] Iteration[110/200] Loss: 0.3421 Acc:86.23%\n",
      "Training:Epoch[039/040] Iteration[120/200] Loss: 0.2868 Acc:86.29%\n",
      "Training:Epoch[039/040] Iteration[130/200] Loss: 0.2875 Acc:86.38%\n",
      "Training:Epoch[039/040] Iteration[140/200] Loss: 0.3325 Acc:86.34%\n",
      "Training:Epoch[039/040] Iteration[150/200] Loss: 0.3377 Acc:86.22%\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jsm/miniconda3/envs/torch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:858: UserWarning: Truncated File Read\n",
      "  warnings.warn(str(msg))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training:Epoch[039/040] Iteration[160/200] Loss: 0.3098 Acc:86.24%\n",
      "Training:Epoch[039/040] Iteration[170/200] Loss: 0.3073 Acc:86.32%\n",
      "Training:Epoch[039/040] Iteration[180/200] Loss: 0.3136 Acc:86.35%\n",
      "Training:Epoch[039/040] Iteration[190/200] Loss: 0.3271 Acc:86.31%\n",
      "Training:Epoch[039/040] Iteration[200/200] Loss: 0.3070 Acc:86.37%\n",
      "Valid:\t Epoch[039/040] Iteration[025/025] Loss: 8.3000 【Acc:85.24%】\n"
     ]
    }
   ],
   "source": [
    "# ============================ step 5/5 训练 ============================\n",
    "train_curve = list()\n",
    "valid_curve = list()\n",
    "\n",
    "for epoch in range(MAX_EPOCH):\n",
    "\n",
    "    loss_mean = 0.\n",
    "    correct = 0.\n",
    "    total = 0.\n",
    "\n",
    "    net.train()\n",
    "    for i, data in enumerate(train_loader):\n",
    "        # forward\n",
    "        inputs, labels = data\n",
    "        inputs = inputs.to(\"cuda\")\n",
    "        labels = labels.to(\"cuda\")\n",
    "        outputs = net(inputs)\n",
    "\n",
    "        # backward\n",
    "        optimizer.zero_grad()\n",
    "        loss = criterion(outputs, labels)\n",
    "        loss.backward()\n",
    "\n",
    "        # update weights\n",
    "        optimizer.step()\n",
    "\n",
    "        # 统计分类情况\n",
    "        _, predicted = torch.max(outputs.data, 1)\n",
    "        total += labels.size(0)\n",
    "        correct += (predicted == labels).squeeze().sum().cpu().numpy()\n",
    "\n",
    "        # 打印训练信息\n",
    "        loss_mean += loss.item()\n",
    "        train_curve.append(loss.item())\n",
    "        if (i+1) % log_interval == 0:\n",
    "            loss_mean = loss_mean / log_interval\n",
    "            print(\"Training:Epoch[{:0>3}/{:0>3}] Iteration[{:0>3}/{:0>3}] Loss: {:.4f} Acc:{:.2%}\".format(\n",
    "                epoch, MAX_EPOCH, i+1, len(train_loader), loss_mean, correct / total))\n",
    "            loss_mean = 0.\n",
    "\n",
    "    scheduler.step()  # 更新学习率\n",
    "\n",
    "    # validate the model\n",
    "    if (epoch+1) % val_interval == 0:\n",
    "\n",
    "        correct_val = 0.\n",
    "        total_val = 0.\n",
    "        loss_val = 0.\n",
    "        net.eval()\n",
    "        with torch.no_grad():\n",
    "            for j, data in enumerate(valid_loader):\n",
    "                inputs, labels = data\n",
    "                inputs = inputs.to(\"cuda\")\n",
    "                labels = labels.to(\"cuda\")\n",
    "                outputs = net(inputs)\n",
    "                loss = criterion(outputs, labels)\n",
    "\n",
    "                _, predicted = torch.max(outputs.data, 1)\n",
    "                total_val += labels.size(0)\n",
    "                correct_val += (predicted == labels).squeeze().sum().cpu().numpy()\n",
    "\n",
    "                loss_val += loss.item()\n",
    "\n",
    "            valid_curve.append(loss.item())\n",
    "            valid_acc.append(correct_val / total_val)\n",
    "            print(\"Valid:\\t Epoch[{:0>3}/{:0>3}] Iteration[{:0>3}/{:0>3}] Loss: {:.4f} 【Acc:{:.2%}】\".format(\n",
    "                epoch, MAX_EPOCH, j+1, len(valid_loader), loss_val, correct_val / total_val))\n",
    "            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACeoElEQVR4nOzdd3hT1RsH8O+9GZ20hU5GoVD23lhQRJmC4EBFRRkCioqKKCryExBlqogDRZkuRBTFgbLKVvaeZZYW6KR0t1n3/P5IkzZt0uQmN7Pv53n6QJObe89N0tw357znPRxjjIEQQgghxEfw7m4AIYQQQoiUKLghhBBCiE+h4IYQQgghPoWCG0IIIYT4FApuCCGEEOJTKLghhBBCiE+h4IYQQgghPkXu7ga4miAIuHnzJmrVqgWO49zdHEIIIYTYgDGGgoIC1KtXDzxffd9MjQtubt68idjYWHc3gxBCCCF2SE1NRYMGDardpsYFN7Vq1QKgf3JCQkLc3BpCCCGE2CI/Px+xsbHG63h1alxwYxiKCgkJoeCGEEII8TK2pJRQQjEhhBBCfAoFN4QQQgjxKRTcEEIIIcSn1LicG0IIIcQZBEGAWq12dzO8mlKptDrN2xYU3BBCCCEOUqvVuHr1KgRBcHdTvBrP82jcuDGUSqVD+6HghhBCCHEAYwxpaWmQyWSIjY2VpOehJjIU2U1LS0PDhg0dKrRLwQ0hhBDiAK1Wi+LiYtSrVw+BgYHubo5Xi4yMxM2bN6HVaqFQKOzeD4WXhBBCiAN0Oh0AODyUQsqfQ8Nzai8KbgghhBAJ0HqFjpPqOaTghhBCCCE+hYIbQgghhPgUCm4IIYQQIom4uDgsXrzY3c2g4EZKGp0AjY5qHBBCCPFsHMdV+zNr1iy79nvo0CE8++yz0jbWDjQVXCI6geGOuYmQ8Rz2T+sLntcnRf169DqW7rqMZaO6olF4kJtbSQghhABpaWnG///000+YMWMGkpKSjLcFBwcb/88Yg06ng1xuPWSIjIyUtqF2op4biWQVqHCrSI3MAhUKSrXG26esO4ELGYWY/ttpN7aOEEKIqzDGUKzWuuWHMWZTG2NiYow/oaGh4DjO+Pv58+dRq1Yt/PPPP+jSpQv8/Pywd+9eXL58GQ888ACio6MRHByMbt26Ydu2bSb7rTwsxXEcli9fjoceegiBgYFo1qwZ/vjjDymfbrOo58YJGKq+uUo0js3ZJ4QQ4h1KNDq0nrHZLcc+O3sgApXSXNrfeustfPjhh2jSpAlq166N1NRUDB48GHPmzIGfnx++/fZbDB06FElJSWjYsKHF/bz77rtYuHAhPvjgA3z22WcYOXIkrl27hjp16kjSTnOo50Yi1qbm2xpNE0IIIZ5g9uzZ6N+/P+Lj41GnTh106NABzz33HNq2bYtmzZrhvffeQ3x8vNWemDFjxuCJJ55A06ZNMXfuXBQWFuLgwYNObTv13BBCCCESClDIcHb2QLcdWypdu3Y1+b2wsBCzZs3Cxo0bkZaWBq1Wi5KSEqSkpFS7n/bt2xv/HxQUhJCQEGRmZkrWTnMouHEC6qQhhJCai+M4yYaG3CkoyHQSzOuvv46tW7fiww8/RNOmTREQEIBHHnkEarW62v1UXiOK4zinr57u/c++h7C3YHRGfilqByqhlNMIISGEEM/177//YsyYMXjooYcA6HtykpOT3dsoC+iK6kZJ6QXoMTcRQz7d4+6mEEIIIdVq1qwZfv31Vxw/fhwnTpzAk08+6fQeGHtRcCOVCl035kalzN3218mbAICLmYVOaRIhhBAilUWLFqF27dro2bMnhg4dioEDB6Jz587ubpZZNCxFCCGE1GBjxozBmDFjjL/36dPH7AzfuLg4bN++3eS2F1980eT3ysNU5vaTm5trd1ttRT03TiDVtO+NJ9Pw+faLkuyLEEIIqSmo50YinN0pxZa9uOYoACAhPhxdGjmv2BEhhBDiS6jnxgvcKqx+mh0hhBBCylFw4wRmE4rN3Ej1cAghhBDpUXAjEWvLLxBCCCHENSi4IYQQQohPoeDGCQzDTZtOp1W7na29PQpVDnDuT0CncbBlhBBCiO+j4EYi5uKUid8flWTfzU59BPz0FHD2d0n2RwghhPgyCm5cxJHc4cCCa/r/5Fa/8iohhBDiKn369MHkyZONv8fFxWHx4sXVPobjOGzYsMGp7QIouHEKZmMoY+tsKaXqlv4/pXl2togQQggpN3ToUAwaNMjsfXv27AHHcTh58qSofR46dAjPPvusFM1zGAU3EuGcOF1KqcrR/4eCG0IIIRIYN24ctm7diuvXr1e5b9WqVejatSvat28vap+RkZEIDAyUqokOoeBGIlItuVCZHFoo1bn6Xyi4IYQQIoH7778fkZGRWL16tcnthYWF+Pnnn/Hggw/iiSeeQP369REYGIh27drhxx9/rHaflYelLl68iN69e8Pf3x+tW7fG1q1bnXAm5tHyC84gYZxTGwXlv1BwQwghno8xQFPsnmMrAm2aiiuXyzFq1CisXr0a06dPN44+/Pzzz9DpdHjqqafw888/480330RISAg2btyIp59+GvHx8ejevbvV/QuCgIcffhjR0dE4cOAA8vLyTPJznI2CGyfILFAhKsTf9EY7e3YiuPzyX0pz7W8UIYQQ19AUA3PruefYb98ElEE2bfrMM8/ggw8+wK5du9CnTx8A+iGp4cOHo1GjRnj99deN27700kvYvHkz1q1bZ1Nws23bNpw/fx6bN29GvXr652Lu3Lm47777xJ+THWhYSiIVQ5ePt16QbL/hJsEN9dwQQgiRRsuWLdGzZ0+sXLkSAHDp0iXs2bMH48aNg06nw3vvvYd27dqhTp06CA4OxubNm5GSYtus3XPnziE2NtYY2ABAQkKCU87DHOq5cYJSrQ6fbLsoyb7CUSGgcWNwczGjAKEBiqo9UoQQQkwpAvU9KO46tgjjxo3DSy+9hCVLlmDVqlWIj4/H3XffjQULFuCTTz7B4sWL0a5dOwQFBWHy5MlQq71jIWcKbpzg30u38O+lWya3nbhuX2ASUbnnhjGXL2R1I7cE/T/eDQBInj/EpccmhBCvw3E2Dw2522OPPYZXXnkFa9aswbfffovnn38eHMfh33//xQMPPICnnnoKgD6H5sKFC2jdurVN+23VqhVSU1ORlpaGunXrAgD279/vtPOojIalJGJLSo1WJ4jer8mwlE4NaEtF78NRZ27QcBghhPii4OBgjBgxAtOmTUNaWhrGjBkDAGjWrBm2bt2K//77D+fOncNzzz2HjIwMm/fbr18/NG/eHKNHj8aJEyewZ88eTJ8+3UlnURUFNx4uHPmmN5TkuqUdhBBCfNO4ceNw+/ZtDBw40Jgj87///Q+dO3fGwIED0adPH8TExODBBx+0eZ88z+O3335DSUkJunfvjvHjx2POnDlOOoOqPGJYasmSJfjggw+Qnp6ODh064LPPPrOYjd2nTx/s2rWryu2DBw/Gxo0bnd1Uh9gzXyqcq9RrUpoHhNSVpD2EEEJIQkJClVptderUsbpMws6dO01+T05ONvm9efPm2LNnj8ltzqoJV5nbe25++uknTJkyBTNnzsTRo0fRoUMHDBw4EJmZmWa3//XXX5GWlmb8OX36NGQyGR599FEXt9yUrUsuiH2MSc4NQDOmCCGEECvcHtwsWrQIEyZMwNixY9G6dWssXboUgYGBxqlpldWpUwcxMTHGn61btyIwMNBicKNSqZCfn2/y403Kh6XKkogpuCGEEEKq5dbgRq1W48iRI+jXr5/xNp7n0a9fP+zbt8+mfaxYsQKPP/44goLMZ6bPmzcPoaGhxp/Y2FhJ2m6Pyr1xHKzPejImFIc11P9LwQ0hhBBSLbcGN9nZ2dDpdIiOjja5PTo6Gunp6VYff/DgQZw+fRrjx4+3uM20adOQl5dn/ElNTXW43WbZMCplbRhKJzBMXnsM3+1LBgAEoBSBnEp/Z3hT/b9UpZgQQgiplkckFNtrxYoVaNeuXbWloP38/ODn5+fCVtnvn9Np2HD8JjYcv4mnE+KMvTY6mT9khiRiNwQ3zlzxnBBCfIWrkmV9mVTPoVt7biIiIiCTyarMnc/IyEBMTEy1jy0qKsLatWsxbtw4ZzbRZra8HNZes4JSrcnvEWX5Nmq/cMA/TH+jG4al6A+WEEIsk8lkAOA11Xs9meE5NDyn9nJrz41SqUSXLl2QmJhonD8vCAISExMxadKkah/7888/Q6VSGasneiNrw1QRZdPA1f51EODG4IYQQohlcrkcgYGByMrKgkKhAM+7fa6OVxIEAVlZWQgMDIRc7lh44vZhqSlTpmD06NHo2rUrunfvjsWLF6OoqAhjx44FAIwaNQr169fHvHnzTB63YsUKPPjggwgPD3dHs52icgeJYVhK33MTqr+RghtCCPEoHMehbt26uHr1Kq5du+bu5ng1nufRsGFDh9Mh3B7cjBgxAllZWZgxYwbS09PRsWNHbNq0yZhknJKSUiUKTkpKwt69e7FlyxZ3NNksW0ZuxI7uGBbNVPvVAQLC9DdScEMIIR5HqVSiWbNmNDTlIKVSKUnPl9uDGwCYNGmSxWGoyhUQAaBFixZemQdSeRjqv8vli2vmFWuq3B9BPTeEEOI1eJ6Hv7+/u5tB4AFF/GqSRVsu4JEv/0OpRgcAOJaSa7yvw+wtmP7baZPtjcNS/uXBjaowB+sOpXplcEcIIYS4gkf03PgCW5ZSWL73KgDg9+M3cP12idXtjcNSFYKborxbeGP9SUTW8sM9LaMcaLHtaCo4IYQQb0I9N26g1gr4bPslq9uZSygOQTEAhgsZBc5sIiGEEOK1KLjxYOU5N3WMwY2cExAIlTubRQghhHg0Cm4kIiYF5lDybesbCQLqlBXx0/iHA4pAgFcAAEJQZE8T7Ub5PYQQQrwJBTdu8OfJm1a3Sc+8CRmnDyrUytoAx5UPTXHFTm0fIYQQ4s0ouPFQT32yEQCQy4IglPXYGIKbUBf33BBCCCHehIIbiYgZuLFllMeQb5PNQstvNPbcUHBDCCGEWELBjYcKL8u3uYWQ8htNZky5Dk0FJ4QQ4k0ouPFQ4WWLZmazkPLgomwJBsq5IYQQQiyj4EYiUs8oMtS4uWVuWIpybgghhBCLKLjxUBGGYSlmZliKKwaNFBFCCCHmUXDjoYw9N2ZybkJRJHqFcUIIIaSmoOBGIlIHG+U5N+ZmS7k258bRIbdXfzqOp5YfgCBQREYIIcT5aOFMDxVudlgqDIA+58abhqV+O3YDAJCUUYBWdUOsbE0IIYQ4hnpuPFSEmWEpjVL/f1f33Eg1FZyG0gghhLgCBTceSAmNMYDJrtBz88HOdAA0W4oQQgipDgU3Hsi4YCaTIR9BxtsTk0sB6HtuClU6p7aBFsskhBDirSi48UCmM6XKh4TymT7QCUExPktMwszfTzvl+Cv2XkW3OYm4nFUo6X69KU+IEEKI96LgRiJSdnQY822YafJtPgIBADzHEIxSfLPvmnQHreC9v84iu1CFWX+cqXa7IpUWS3ZckjwIIoQQQhxBwY0HCod+Gnjl4EYFJVRMv0K4K/JurAVs8/85jw82J6HvR7uc3hZCCCHEVhTceKAIQ40bhFa5L68sB8fWGVM7zmfiQkaBdI2r4Mi126K2p2EpQgghrkB1biTCIN24VHilYamdSZlYvO0CACCfBSKKy7VpZfBT1/MwdvUhAEDy/CF2t0eqmIRylAkhhLgCBTceqHLOzQ8HUoz3GfJuQrgiWIunzqXnO9QOQ8DmSExCs64IIYS4Gg1LeSBjdWJUreZrmDEVylXNuckuVOH1n0/gaIq44SJXoWEpQgghrkDBjUSk7KAwu65UGWPPjZlhqem/ncIvR67j4S/+k64x1aBghRBCiCeiYSkPVDnnpqJ8VmFYqpId57OM/1/971V4wjqVNCpFCCHE1Si48TjM/KKZZYyzpSr13FzOKoRaJxh/n/Xn2WqP8t+lbGw6k45p97VCgFJmdhtOslRiQgghxHUouJGIVB0UtVACP04LwPxUcGOV4kpTwf+7fEvUcZ5cfgAAEBagwJQBLcxuk1uirnYfYoelKFgihBDiCpRz42EM+TYFLAAqKKvcX55zI00Rv9TbJRbvO30jH+sOpVoMSWwZcqJRKUIIIa5GwY2HqW5ICqh+tpQjtDoB3/yXjKR004J/b/92StLjEEIIIc5Gw1ISkaqeSwRneRo4UP1sKUf8eDAFM62sJUUIIYR4AwpuPEx1M6WA8tlStcpybvJLNXjxh6PIL9U6dNwT1/Ms3mcpbKOp4IQQQjwRBTcSkSq3xLBoZraF4KZ8tpR+WOqrXZex52K2REevytHzogrFhBBCXI1ybjyMsefGzEwpoOJsqRLwEJBf4liPjStRTw8hhBBXoODGw1ReV6qygrKcGwAIRrGkC3aaoxMYcopUZu+jqd2EEEI8EQU3EpFq9MXabCkN5ChmfgCknzFlyZvry2dMfbQlSdRjaVCKEEKIq1Fw42GM60pZGJYCnDdjyhafbb9k92Opn4cQQogrUHAjsdAAhUOPtzZbCqi4vlQxbhdrHDoeIYQQ4msouJGMfgCG44CmUcF27UEGHWqjEED1wU3FGVMbT6aJa6UE42eCiBU5abIUIYQQV6PgxgnsHX6pjULwHIPAONxGLYvbWVpfypoj13LQbc42/HHipp0t1KNZT4QQQjwZ1bmRGAf7L/6GfJsc1IJQTdxpyLkJFbm+1PAv9wEAXv7xmH0NJIQQQrwA9dxIpOLwi71TpG3JtwEq5ty4ZraUJbYEcc6eqk4IIYRURsGNE9jbcxNhZRq4Qb4x58b1s6UAyqMhhBDi2Si4kRjnQEKKYVjK0qKZBhVnS3kTytUhhBDiCm4PbpYsWYK4uDj4+/ujR48eOHjwYLXb5+bm4sUXX0TdunXh5+eH5s2b4++//3ZRay2r2JnB23kVNwxLZTPLNW6AqutL2aJUo7OrTY6iXh5CCCGu5tbg5qeffsKUKVMwc+ZMHD16FB06dMDAgQORmZlpdnu1Wo3+/fsjOTkZv/zyC5KSkrBs2TLUr1/fxS2vnv3DUmU9N1ZzbsTPlmo/a4vZ213ZmXI+vcCFRyOEEFJTuTW4WbRoESZMmICxY8eidevWWLp0KQIDA7Fy5Uqz269cuRI5OTnYsGEDevXqhbi4ONx9993o0KGDi1tuGQdgwfD2CPYTPxGtfNFMazk34mdLqXWC6PZYsutCll2Pe/fPs5K1gRBCCLHEbcGNWq3GkSNH0K9fv/LG8Dz69euHffv2mX3MH3/8gYSEBLz44ouIjo5G27ZtMXfuXOh0lodcVCoV8vPzTX6coeLwS9v6oTg5c4DofVhbNNNAypybX4/dQGpOsagenB1J5nvWrHH2ENXtIjW+2HkJaXklzj0QIYQQj+a24CY7Oxs6nQ7R0dEmt0dHRyM9Pd3sY65cuYJffvkFOp0Of//9N9555x189NFHeP/99y0eZ968eQgNDTX+xMbGSnoelvA8hzXje4h6THjZsJS1nJt8O3JuqvPk8v12Tdj2tPzgV346joWbkvDksgPubgohhBA3cntCsRiCICAqKgpff/01unTpghEjRmD69OlYunSpxcdMmzYNeXl5xp/U1FSntrFivk3PphE49k5/mx9r87BUWc9NEKeCHFrxjawkNacEm8+YDyil5dyum91lw2VXs91b/4cQQoh7uS24iYiIgEwmQ0ZGhsntGRkZiImJMfuYunXronnz5pDJZMbbWrVqhfT0dKjVarOP8fPzQ0hIiMmPM1gqVlc7SIk3B7W0+vgAlCKIUwGwPixVUJZzAwC1JKp1U1Bqe5D07b5rdh3DMCwlCAzv/3UWfzq4DAQhhBBijtuCG6VSiS5duiAxMdF4myAISExMREJCgtnH9OrVC5cuXYIglCfHXrhwAXXr1oVSqXR6m50pnNPPJCplChQioNptdZChgOm38fRaN+bybLaey8DyvVfx0o/HsPrfq0i55dnnQAghxLu4dVhqypQpWLZsGb755hucO3cOzz//PIqKijB27FgAwKhRozBt2jTj9s8//zxycnLwyiuv4MKFC9i4cSPmzp2LF1980V2nYIadNW4M+TYItWkf9q4vJSmRc94Nm2cXqoy3zfrzLPot2iVlqwAAGglnhxFCCPEubl04c8SIEcjKysKMGTOQnp6Ojh07YtOmTcYk45SUFPB8efwVGxuLzZs349VXX0X79u1Rv359vPLKK3jzzTfddQpGjs4EsnVdKYN8Foj63C19z42HFcrLK9HgZm4JWtW17VyknKZuUKzSITTQq1LKCCGESMTtq4JPmjQJkyZNMnvfzp07q9yWkJCA/fv3O7lVric6uJF4xpRY4785jBOpuWbvu2vBduSXarH++QSTAMcQ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3BgBAQGIj4/He++9Z7Kmk8e/how4bO3atUypVLKVK1eyM2fOsAkTJrCwsDCWkZHh7qZV8ffff7Pp06ezX3/9lQFgv/32m8n98+fPZ6GhoWzDhg3sxIkTbNiwYaxx48aspKTEuM2gQYNYhw4d2P79+9mePXtY06ZN2RNPPGG8Py8vj0VHR7ORI0ey06dPsx9//JEFBASwr776yunnN3DgQLZq1Sp2+vRpdvz4cTZ48GDWsGFDVlhYaNxm4sSJLDY2liUmJrLDhw+zO+64g/Xs2dN4v1arZW3btmX9+vVjx44dY3///TeLiIhg06ZNM25z5coVFhgYyKZMmcLOnj3LPvvsMyaTydimTZucen5//PEH27hxI7tw4QJLSkpib7/9NlMoFOz06dNef26VHTx4kMXFxbH27duzV155xXi7t5/jzJkzWZs2bVhaWprxJysry2fOLycnhzVq1IiNGTOGHThwgF25coVt3ryZXbp0ybiNt3/OZGZmmrx+W7duZQDYjh07GGPe/xrOmTOHhYeHs7/++otdvXqV/fzzzyw4OJh98sknxm08/TWk4EYC3bt3Zy+++KLxd51Ox+rVq8fmzZvnxlZZVzm4EQSBxcTEsA8++MB4W25uLvPz82M//vgjY4yxs2fPMgDs0KFDxm3++ecfxnEcu3HjBmOMsS+++ILVrl2bqVQq4zZvvvkma9GihZPPqKrMzEwGgO3atYsxpj8fhULBfv75Z+M2586dYwDYvn37GGP6AJDneZaenm7c5ssvv2QhISHGc3rjjTdYmzZtTI41YsQINnDgQGefUhW1a9dmy5cv96lzKygoYM2aNWNbt25ld999tzG48YVznDlzJuvQoYPZ+3zh/N5880125513WrzfFz9nXnnlFRYfH88EQfCJ13DIkCHsmWeeMbnt4YcfZiNHjmSMecdrSMNSDlKr1Thy5Aj69etnvI3nefTr1w/79u1zY8vEu3r1KtLT003OJTQ0FD169DCey759+xAWFoauXbsat+nXrx94nseBAweM2/Tu3RtKpdK4zcCBA5GUlITbt2+76Gz08vLyAAB16tQBABw5cgQajcbkHFu2bImGDRuanGO7du0QHR1t3GbgwIHIz8/HmTNnjNtU3IdhG1e+5jqdDmvXrkVRURESEhJ86txefPFFDBkypEo7fOUcL168iHr16qFJkyYYOXIk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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_x = range(len(train_curve))\n",
    "train_y = train_curve\n",
    "\n",
    "train_iters = len(train_loader)\n",
    "valid_x = np.arange(1, len(valid_curve)+1) * train_iters*val_interval # 由于valid中记录的是epochloss，需要对记录点进行转换到iterations\n",
    "valid_y = valid_curve\n",
    "\n",
    "plt.plot(train_x, train_y, label='Train')\n",
    "plt.plot(valid_x, valid_y, label='Valid')\n",
    "\n",
    "plt.legend(loc='upper right')\n",
    "plt.ylabel('loss value')\n",
    "plt.xlabel('Iteration')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.save(net, \"./1\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "net = torch.load(\"./1\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
